[英]Why can't I get a file from resources?
為什么我無法從資源中獲取文件?
URL resource = getClass().getClassLoader().getResource("input data/logic test.csv");
System.out.println("Found "+resource);
CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
CSVReader reader = new CSVReaderBuilder(new FileReader(resource.getFile())).withSkipLines(1).withCSVParser(parser).build();
控制台輸出:
Found file:/home/alexandr/Repos/OTUS/first_home_work/target/classes/input%20data/logic%20test.csv
Exception in thread "main" java.io.FileNotFoundException: /home/alexandr/Repos/OTUS/first_home_work/target/classes/input%20data/logic%20test.csv (Нет такого файла или каталога)
這一行存在一個固有的邏輯問題:
CSVReader reader = new CSVReaderBuilder(
new FileReader(resource.getFile()))..
一旦 CSV 成為 Jar 的一部分,它將不再可作為File
對象訪問。 但是這樣的事情應該直接適用於 URL。
CSVReader reader = new CSVReaderBuilder(
new InputStreamReader(resource.openStream()))..
更改目錄名和文件名中 _ 的空間,並工作
這僅在資源不在Jar 文件中時有效。
它的:
try (InputStream raw = ClassThisIn.class.getResourceAsStream(""input data/logic test.csv")) {
InputStreamReader isr = new InputStreamReader(raw, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
// now use br as if it was your filereader.
}
這解決了許多問題:
getClass().getClassLoader().getResource
不會,這就是為什么您不應該這樣做)。我在目錄名和文件名中更改了 _ 的空間,然后工作.... omg。
答案在您的控制台輸出中 - 根本找不到該文件。 我會嘗試您編寫的相同代碼,但使用一個沒有空格的文件 - 看看是否仍然找不到該文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.