【发布时间】:2013-08-14 23:34:59
【问题描述】:
Java 新手。我正在构建一个 Java HTTP 服务器(不允许使用特殊库)。我需要提供某些文件(我称之为模板),我正在使用这段代码来提供它们:
this.getClass().getResourceAsStream("/http/templates/404.html")
并将它们包含在我的 .jar 中。这行得通。 (我意识到我正在将它们作为输入流读取。)
现在我想将模板、常规文件、重定向的所有文件(作为文件类型)存储在一个哈希图中,如下所示:url -> 文件。我有一个提供文件的 Response 类。
这适用于除我的模板之外的所有内容。如果我尝试在 hashmap 中插入 getResource 代码,我的 Response 类中会出现错误。
这是我用来构建哈希图的代码:
new File(this.getClass().getResource("/http/templates/404.html").getFile())
这是我得到的错误:
Exception in thread "main" java.io.FileNotFoundException: file:/Users/Kelly/Desktop/Java_HTTP_Server/build/jar/server.jar!/http/templates/404.html (No such file or directory)
我运行了这个命令,可以看到我的 jar 中的模板:
jar tf server.jar
我的想法哪里出错了?我想我漏掉了一块拼图。
更新:这是我运行上面最后一个命令时得到的一部分......所以我认为我有正确的文件路径?
http/server/serverSocket/SystemServerSocket.class
http/server/serverSocket/WebServerSocket.class
http/server/ServerTest.class
http/templates/
http/templates/404.html
http/templates/file_directory.html
http/templates/form.html
【问题讨论】:
-
尝试使用 getPath() 而不是 getFile()。另外,请确保这是一个有效的路径。
-
谢谢,乔希!虽然没有工作。我得到了同样的错误。此外,我更新了我的问题以显示我的 server.jar 中的内容。
-
异常的消息文本应该给你一个线索:它是对 jar 文件的一些引用,它可能以
Stream打开,但不是正确的File位置。为什么这里需要File对象? -
感谢您的帮助,陀螺。哈希图中的所有其他值(对于每个键/值对)都是文件。因此,似乎需要对模板进行一些重新编码才能使模板不是文件而其余的都是文件?
标签: java http getresource