【发布时间】:2017-08-20 14:27:57
【问题描述】:
我正在使用 NetBeans 8.0.2(我知道已经有 v8.2,但它对我来说有很多错误,所以我回到 v8.0.2)并且我需要一个指向我的 .obj 文件的字符串路径参数属性如下:
api.parameter("filename", "obj/someFile.obj");
上面的示例在我的应用程序的先前版本中工作,我将 .obj 文件放在与 .jar 文件相同的目录中名为“obj”的文件夹中,但现在我试图将其包含在带有代码的 JAR 本身:
api.parameter("filename", MyClass.class.getResourceAsStream("/someFile.obj").toString());
...它不再起作用,因为路径字符串解释不是文件的路径,它看起来更像这样:
java.io.BufferedInputStream@215d7ea7
...当然,我的代码需要像普通路径字符串这样的东西,我会以这种伪代码的方式说:
api.parameter("filename", "<this.jar>/someFile.obj");
所以在对 StackOverflow 进行了一番摆弄之后,我发现了一些我认为实际上可以让我直接将该路径作为字符串放置的代码:
URL jar = MyClass.class.getProtectionDomain().getCodeSource().getLocation();
api.parameter("filename", jar + "/someFile.obj");
但令人惊讶的是,尽管我多次检查该文件是否真的存在于我构建的 jar 文件中(是的,它在根目录中),但它仍然给我这个错误:
java.io.FileNotFoundException: file:\Z:\_JAVA_\MyProject_0_018\dist\bin\myjar.jar\someFile.obj <The filename, directory name, or volume label syntax is incorrect>
而且我 100% 确定文件的名称是正确的,而且它在我的 jar 文件的根目录中的位置也是正确的。
还是它真的认为myjar.jar 是一个目录?
我正在拼命寻找这个“路径字符串”混乱的解决方案。
【问题讨论】:
标签: java path stream getresource