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

时间:2017-03-27 18:29:31

标签: java path stream getresource

我正在使用NetBeans 8.0.2(我知道已经有了v8.2,但是它有很多错误,所以我回到了v8.0.2)我需要一个字符串路径到我的.obj文件中参数属性如下:

api.parameter("filename", "obj/someFile.obj");

以上示例在我的应用程序的早期版本中工作,我将.obj文件放在名为" obj"的文件夹中。在我的.jar文件所在的目录中,但现在我正试图将其包含在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是一个目录?

我拼命想找到这个&#34;路径字符串&#34;的解决方案。混乱。

1 个答案:

答案 0 :(得分:0)

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

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

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