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

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

在可執行的 jar 中使用資源文件

在可執行的 jar 中使用資源文件

慕沐林林 2021-11-24 15:05:05
我試圖讓自己熟悉 maven 并為此目的創建了一個測試項目。我創建了一個簡單的類,它只是打印一些東西,從 .txt 文件中讀取。我的主要課程是這樣的:public class HelloWorld {    public static void main(String[] args) throws IOException {        String filePath = HelloWorld.class.getClassLoader().getResource("test.txt").getFile();        BufferedReader br = new BufferedReader(new FileReader(filePath));        String line;        while ((line = br.readLine()) != null) {            System.out.println(line);        }        br.close();    }}我創建了一個資源文件夾,將其標記為資源根目錄,修改了資源模式并從我的項目中打包了一個可執行的 jar。我的項目結構如下所示:Quickstart├───.idea├───src│   ├───main│   │   ├───java│   │   │   └───de│   │   │       └───mb│   │   │           └───hello|   |   |               └───HelloWorld.java│   │   └───resources|   |       └───test.txt現在我的問題是,當我嘗試執行我的 jar 時,我收到以下錯誤:Exception in thread "main" java.io.FileNotFoundException:   file:\C:\Users\mb\IdeaProjects\Quickstart\target\Quickstart-1.0-SNAPSHOT.jar!\test.txt (The filename, directory name, or volume label syntax is incorrect)    at java.io.FileInputStream.open0(Native Method)    at java.io.FileInputStream.open(FileInputStream.java:195)    at java.io.FileInputStream.<init>(FileInputStream.java:138)    at java.io.FileInputStream.<init>(FileInputStream.java:93)    at java.io.FileReader.<init>(FileReader.java:58)    at de.mb.hello.HelloWorld.main(HelloWorld.java:15)我想問題是 .txt 文件在 .jar 中,但是我應該如何聲明路徑以使其工作?
查看完整描述

1 回答

?
UYOU

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

你的 jar 文件中打包的資源不是一個 File 而是一個 zip 文件中的一系列字節。它必須處理具有字節流。


使用 getResourceAsStream(...) 而不是 getResource(...) 來獲取 InputStream 而不是 File 并使用 InputStreamReader 而不是 FileReader 讀取內容。


不要忘記在 finally 塊中或使用try-with-resources關閉資源。


類似的東西:


public class HelloWorld {

    public static void main(String[] args) throws IOException {

        try(BufferedReader br = new BufferedReader(new InputStreamReader(HelloWorld.class.getClassLoader().getResourceAsStream("test.txt")))) {

          String line;

          while ((line = br.readLine()) != null) {

              System.out.println(line);

          }

       }

    }

}


查看完整回答
反對 回復 2021-11-24
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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