2017-05-09 94 views
0

我想讀取我的Spring引導控制檯應用程序的資源文件夾中的文件,但我收到文件未找到異常。無法從彈簧引導罐中讀取文本文件

這裏是我的POM

<resource> 
    <directory>src/main/resources</directory> 
    <includes> 
     <include>**/*.*</include> 
    </includes> 
    </resource> 

這裏是例外:

java.io.FileNotFoundException: class path resource [9.txt] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/abc/Documents/workspace-sts-3.8.4.RELEASE/xyz/target/xyz-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/9.txt 

我打開了XYZ-0.0.1-SNAPSHOT.jar文件和9.txt是BOOT- INF/classes文件夾。

感謝, -dj

+0

如何你想讀什麼書? – pvpkiran

+0

我忘記提及我正在使用ClassPathResource。 ClassPathResource resource = new ClassPathResource(len +「.txt」); File file = resource.getFile(); –

回答

4

這是春天開機,讓我們使用使用ClassPathResource

@Component 
public class MyBean { 
    @Value("9.txt") 
    private ClassPathResource resource; 

    @PostConstruct 
    public void init() throws IOException { 
     Files.lines(resource.getFile().toPath(), StandardCharsets.UTF_8) 
      .forEach(System.out::println); 
    } 
} 

更新:由於ClassPathResource支持的分辨率的java.io.File如果類路徑的資源所在的文件中系統,但不適用於JAR中的資源,最好使用這種方式

@Component 
public class MyBean { 
    @Value("9.txt") 
    private ClassPathResource resource; 

    @PostConstruct 
    public void init() throws IOException { 
     try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8))) { 
      bufferedReader.lines() 
       .forEach(System.out::println); 
     }   
    } 
} 
+0

我忘了提及我正在使用ClassPathResource。 \t \t \t ClassPathResource resource = new ClassPathResource(len +「.txt」); File file = resource.getFile(); –

+0

@desiJoe我已經更新了我的答案 –

0

這對我有用!

InputStream in = this.getClass().getResourceAsStream("/" + len + ".txt"); 

哪裏,因爲這沒有工作

ClassPathResource resource = new ClassPathResource(len + ".txt"); 
File file = resource.getFile();