簡體   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