无法将资源作为流读取



我正在尝试从磁盘读取一个HTML文件。但它总是返回null。我已经尝试将where放在目录中,但仍然返回null。

class MainVerticle : AbstractVerticle() {
override fun start(startPromise: Promise<Void>) {
vertx
.createHttpServer()
.requestHandler { req ->
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!")
}
.listen(8888) { http ->
if (http.succeeded()) {
startPromise.complete()
println("HTTP server started on port 8888")
} else {
startPromise.fail(http.cause());
}
}
var mailTemplateStream = (getStreamFromRes("emailVerification.html") as 
InputStream).reader().readText()
println(mailTemplateStream)
}
fun getStreamFromRes(fileName: String): InputStream? {
val stream = Object::class.java.getResourceAsStream("/$fileName")
return stream
}
}

它总是抛出以下异常:-

SEVERE: null cannot be cast to non-null type java.io.InputStream
kotlin.TypeCastException: null cannot be cast to non-null type 
java.io.InputStream
at example.starter.MainVerticle.start(MainVerticle.kt:26)
at io.vertx.core.impl.DeploymentManager.lambda$doDeploy$9(DeploymentManager.java:556)
at 
io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:369)
at io.vertx.core.impl.EventLoopContext.lambda$executeAsync$0(EventLoopContext.java:38)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:510)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:518)
at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)

在这里,通过函数getStreamFromRes,我试图获得输入流。我已经将文件emailVerification.html放在MainVerticle类旁边,但它仍然返回null。有人知道我做错了什么吗?

更新:-我已将此项目添加到我的github项目中:-https://github.com/captabhi/abhishek09021998-gmail.com.git

您的emailVerification.html文件应与编译的类文件一起复制到构建文件夹中。资源文件夹中的每个源文件并不意味着它将被类加载器自动拾取。您的构建脚本应该将资源复制到构建文件夹中。

您的GitHub项目与您提供的示例代码有点不同。我已经克隆了你的项目,并将我的答案建立在它的基础上,而不是基于问题中的代码。

getStreamFromRes的正确实现应该是:

fun getStreamFromRes(fileName: String) = this::class.java.classLoader.getResourceAsStream(fileName)

注意,fileName之前没有反斜杠,因此我们也不必对其进行插值

在您的代码中,您还可以使用避免强制转换

val mailTemplateStream = getStreamFromRes("mail/emailVerification.html")?.reader()?.readText()

相关内容

  • 没有找到相关文章

最新更新