4 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
而不是嘗試將資源作為文件來處理,而只是要求ClassLoader通過getResourceAsStream返回資源的InputStream:
InputStream in = getClass().getResourceAsStream("/file.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(in));
只要file.txt
資源在類路徑上可用,那么無論file.txt
資源是在classes/
目錄中還是在內(nèi)部,這種方法都將以相同的方式工作jar
。
之所以URI is not hierarchical
發(fā)生這種情況,是因?yàn)閖ar文件中資源的URI看起來像這樣:file:/example.jar!/file.txt
。您無法讀取jar
(zip
文件)中的條目,就像它是一個(gè)普通的舊文件。
這可以通過以下答案得到很好的解釋:

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
要訪問jar中的文件,您有兩個(gè)選擇:
將文件放在與包名匹配的目錄結(jié)構(gòu)中(在解壓縮.jar文件后,它應(yīng)該與.class文件位于同一目錄中),然后使用
getClass().getResourceAsStream("file.txt")
將文件放在根目錄下(在解壓縮.jar文件后,它應(yīng)該在根目錄中),然后使用它來訪問它
Thread.currentThread().getContextClassLoader().getResourceAsStream("file.txt")
當(dāng)jar用作插件時(shí),第一個(gè)選項(xiàng)可能不起作用。

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果你想讀作文件,我相信仍有類似的解決方案:
ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("file/test.xml").getFile());

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
之前我遇到過這個(gè)問題,我做了后備加載方式。基本上第一種方式在.jar文件中工作,第二種方式在eclipse或其他IDE中工作。
public class MyClass { public static InputStream accessFile() { String resource = "my-file-located-in-resources.txt"; // this is the path within the jar file InputStream input = MyClass.class.getResourceAsStream("/resources/" + resource); if (input == null) { // this is how we load file within editor (eg eclipse) input = MyClass.class.getClassLoader().getResourceAsStream(resource); } return input; }}
添加回答
舉報(bào)