亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從jar中讀取資源文件

從jar中讀取資源文件

湖上湖 2019-05-29 15:35:54
從jar中讀取資源文件我想從我的jar中讀取資源,如下所示:File file;file = new File(getClass().getResource("/file.txt").toURI());BufferredReader reader = new BufferedReader(new FileReader(file)); //Read the file并且它在Eclipse中運行時工作正常,但是如果我將它導出到jar中運行它就會出現IllegalArgumentException:Exception in thread "Thread-2"java.lang.IllegalArgumentException: URI is not hierarchical而且我真的不知道為什么,但經過一些測試我發現如果我改變了file = new File(getClass().getResource("/file.txt").toURI());至file = new File(getClass().getResource("/folder/file.txt").toURI());然后它的工作正好相反(它適用于jar而不是eclipse)。我正在使用Eclipse,我的文件夾在一個類文件夾中。
查看完整描述

4 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

而不是嘗試將資源作為文件來處理,而只是要求ClassLoader通過getResourceAsStream返回資源的InputStream

InputStream in = getClass().getResourceAsStream("/file.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(in));

只要file.txt資源在類路徑上可用,那么無論file.txt資源是在classes/目錄中還是在內部,這種方法都將以相同的方式工作jar。

之所以URI is not hierarchical發生這種情況,是因為jar文件中資源的URI看起來像這樣:file:/example.jar!/file.txt。您無法讀取jarzip文件)中的條目,就像它是一個普通的舊文件。

這可以通過以下答案得到很好的解釋:


查看完整回答
反對 回復 2019-05-29
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

要訪問jar中的文件,您有兩個選擇:

  • 將文件放在與包名匹配的目錄結構中(在解壓縮.jar文件后,它應該與.class文件位于同一目錄中),然后使用 getClass().getResourceAsStream("file.txt")

  • 將文件放在根目錄下(在解壓縮.jar文件后,它應該在根目錄中),然后使用它來訪問它 Thread.currentThread().getContextClassLoader().getResourceAsStream("file.txt")

當jar用作插件時,第一個選項可能不起作用。


查看完整回答
反對 回復 2019-05-29
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

如果你想讀作文件,我相信仍有類似的解決方案:

    ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource("file/test.xml").getFile());


查看完整回答
反對 回復 2019-05-29
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

之前我遇到過這個問題,我做了后備加載方式?;旧系谝环N方式在.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;
    }}


查看完整回答
反對 回復 2019-05-29
  • 4 回答
  • 0 關注
  • 1517 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號