JAVA getResourceAsStream() real path string interpretation of a file

随声附和 提交于 2019-12-12 04:31:45

问题


I am using NetBeans 8.0.2 (I know there already is v8.2 but it has a lot of bugs for me so I got back to v8.0.2) and I need a string path to my .obj file for a parameter attribute like this:

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

Above example worked in a previous version of my app where I had that .obj file placed in a folder called "obj" in the same directory as my .jar file, but now as I am trying to rather include it in the JAR itself with code:

api.parameter("filename", MyClass.class.getResourceAsStream("/someFile.obj").toString());

...it is not working anymore as the path string interpretation is not a path to a file, it looks more like this:

java.io.BufferedInputStream@215d7ea7

...where, of course, my code is expecting something like normal path string, I would said something in this pseudo-code manner:

api.parameter("filename", "<this.jar>/someFile.obj");

So after a fiddling a bit around StackOverflow I've found pieces of code that I thought could actually enable me to directly place that path as a string:

URL jar = MyClass.class.getProtectionDomain().getCodeSource().getLocation();
api.parameter("filename", jar + "/someFile.obj");

But surprisingly although I checked several times if the file actually really exist in my built jar file (and yes, it is there in the root) it still gives me this error:

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>

And I am 100% sure the name of the file is correct, also its placement in the root of my jar file.

Or does it actually thinks that myjar.jar is a directory?

I am desperately trying to find a solution to this "path string" mess.


回答1:


Your protection domain's code source location likely returns not what you'd expect it to.

You should use getResource(name) directly, like this:

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


来源:https://stackoverflow.com/questions/43053896/java-getresourceasstream-real-path-string-interpretation-of-a-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!