我試圖讓自己熟悉 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);
}
}
}
}
添加回答
舉報
0/150
提交
取消