繁体   English   中英

JAVA getResourceAsStream()文件的真实路径字符串解释

[英]JAVA getResourceAsStream() real path string interpretation of a file

我正在使用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是目录?

我拼命地试图找到解决此“路径字符串”混乱的方法。

您的保护域的代码源位置可能不会返回您期望的位置。

您应该直接使用getResource(name) ,如下所示:

URL locator = MyClass.class.getResource("someFile.obj");
api.parameter("filename", locator.toString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM