簡體   English   中英

使用類路徑在Java中加載CSV

[英]Load CSV in java using classpath

如何使用classpath加載csv文件? 在此之前,我嘗試使用FileReader加載文件,該文件在本地運行時工作正常,但在部署到外部服務器時會拋出FileNotFound之類的異常。 下面的代碼在本地工作,但是將jar部署在tomcat文件夾www / [jar]上時,將引發此異常。不幸的是,我無法提供原始代碼。 要點是:

BufferedReader br = new BufferedReader(new FileReader("src/SSR.csv"));
    while ((line = br.readLine()) != null) {
        // use comma as separator
        String[] cols = line.split(",");
        map.put(cols[1],cols[0]); 

這是例外

您應該在這里考慮兩件事

  1. 正如我們的同事已經說過的那樣,當代碼在jar中運行並且您想要加載類路徑資源時,您就不能使用您所說的FileReader方法。

您當前的代碼假定CSV位於工件之外FileSystem中的某個位置,這可能不是正確的,因此它將找不到該文件。

正確的方法是使用getClass().getResourceAsStream() / getClass().getClassLoader().getResourceAsStream()

  1. CSV文件可能很復雜,盡管它們的結構看起來非常簡單。 因此,如果您從事的是現實生活中的項目,而不是出於學習目的進行某種家庭作業,那么我強烈建議您使用3rdparty庫來處理CSV:

...僅舉幾例

既然您用spring標記了問題,我想向您指出Spring框架提供的資源實現。 該文檔可以在以下位置找到:

春季資源支持

對於您的csv文件,有些類似

Resource csv = context.getResource("classpath:some/resource/path/my.csv");
InputStream inputstream = csv.getInputStream();

應該是一個起點。 資源接口提供了一個

File getFile() throws IOException;

方法,但這僅在文件位於文件系統中時才起作用。 因此,對於您的情況,您應該在我認為的輸入流中使用該方法。

編輯:在這里您可以找到使用ClassPathResource https://stackoverflow.com/a/44412189/7634201的另一個答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM