2017-09-24 389 views
0

包括外部文件我創建了一個彈簧引導應用,其讀取Excel文件用於向在前端所以基本上持久性數據的其源極被顯示的數據。我能夠從我的eclipse正確運行,但是當我創建一個彈簧引導jar並從命令行運行它失敗,因爲文件不包含在jar中。春季啓動JAR

我已經嘗試了兩種位置的src /主/資源/ src目錄/主/ web應用/ WEB-INF /外部/但在這兩種情況下,不包含這些文件。

代碼:

private static final String FILE1 = "\\src\\main\\webapp\\WEB-INF\\external\\file1.csv"; 
private static final String FILE2 = "\\src\\main\\webapp\\WEB-INF\\external\\file2.csv"; 
private static String currentDirectory = Paths.get(".").toAbsolutePath().toString(); 
private static String completeAbsolutePath = currentDirectory 
         .substring(0, currentDir.length() - 1) 
         .replace("\\", "\\\\"); 

reader = new CSVReader(new FileReader(completePath + FILE1)) 

錯誤:

java.io.FileNotFoundException: C:\刪除\ SRC \主\ web應用\ WEB-INF \外部\ File1.csv

有人可以幫忙嗎?

+0

,請複製粘貼,你指的是文件 – zuckermanori

+0

https://stackoverflow.com/questions/22886083/how-do-i-run-a-spring-boot-executable-jar-in-a代碼 - 生產環境 –

+0

喜@zuckermanori下面是代碼:我從兩個文件(把它們當作兩個獨立的數據庫表) 私有靜態最後絃樂FILE1 =「\\ \\的src主要\\ \\ web應用WEB讀取數據-INF \\外部\\ file1.csv「; private static final String FILE2 =「\\ src \\ main \\ webapp \\ WEB-INF \\ external \\ file2.csv」;私人靜態字符串completeAbsolutePath = currentDir.substring(0,currentDir.length() - 1).replace(「\\」,「\\\\」); reader = new CSVReader(new FileReader(completePath + FILE1)) –

回答

1

您這裏有兩個問題:

  1. 你把資源下src文件夾 而不是創建一個指定的文件夾中的資源,並把它放在那裏。 要做到這一點,你應該建立在同一 水平「SRC」右鍵單擊該文件夾名爲「資源」的文件夾,選擇「標記目錄作爲 - > 資源根」
  2. 你是指用文件相對路徑。這可能在日食 中工作,但是當你將它作爲一個jar改變路徑並且 相對路徑不再正確時運行它。

    要使用這樣的資源,您應該使用ClassLoader API ClassLoader.getResourceAsStream(String name)來獲得您的資源。

    應該類似於以下內容:

    reader = new CSVReader(new InputstreamReader(ClassLoader.getResourceAsStream(completePath + 
    

    文件1)));

+0

你打開了罐子,看到文件不在那裏嗎? – zuckermanori

+0

我能夠使用您提供的語句將文件包含在jar中。我已經將該文件放在資源文件夾中,而且它們被包含在JAR文件中。謝謝。該應用程序仍然沒有從命令提示符運行,但這是我認爲的另一個問題。 –