2017-09-25 172 views
1

我想在使用相對路徑的主要方法中從我的資源文件夾中獲取JSON文件。該代碼使用絕對路徑工作,但是一旦我從我想要的項目生成一個jar文件就會中斷。無法從資源文件夾中使用相對路徑獲取JSON文件

public static void main(String[] args) throws FileNotFoundException { 
// Read in database 
db = Database.read(Thread.currentThread().getContextClassLoader().getResource("JSON/inhabitants.json").toExternalForm()); 
names = db.getAllNames(); 

讀取調用數據庫中使用inputstream讀取文件的方法。

public static Database read(String filename) throws FileNotFoundException { 
    InputStream is = new FileInputStream(filename); 
    Reader reader = new InputStreamReader(is); 

    return gson.fromJson(reader, Database.class); 
    } 

我得到的錯誤是:

java.io.FileNotFoundException: 文件:/Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json (FileInputStream.java:138)中的java.io.FileInputStream.open0(原生 方法)上的java.io.FileInputStream.open(FileInputStream.java:195)在 java.io.FileInputStream。(FileInputStream.java:93)at Core.Database.re廣告(Database.java:22)在Main.main(Main.java:51)... 11多個

在目錄中的文件/Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json

確實存在,但是,所以我不知道是什麼出錯了。

這裏是我的文件夾結構(Maven的基本結構):

folder structure

是否有將仍能我來部署它作爲一個jar文件的解決方案?

EDIT(25/09):如果我使用的替代的getResource的getResourceAsStream,我收到以下錯誤:

Caused by: java.io.FileNotFoundException: [email protected] (No such file or directory) 
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 Core.Database.read(Database.java:22) 
at Main.main(Main.java:51) 
... 11 more 
+0

僅供參考,爲什麼要將json文件放入目標文件夾?目標是建立文件夾,並且每當你做'mvn clean'時都會被刪除' – amicoderozer

+0

我沒有故意這樣做,我只是將文件添加到資源文件夾,並且在構建工件時將它添加到目標文件夾 –

回答

1

你必須使用getResourceAsStream從運行jar文件裏讀取文件(其中包含文件在src\main\resources)!

+0

我是使用getResourcAsStream獲取文件未找到異常 –

+0

我不知道您使用的是哪種開發環境。如果你運行它,例如在Eclipse中,Eclipse應該像處理jar一樣處理這個調用,但是jar裏面有什麼?查找然後轉到classpath,並且'src \ main \ resources'必須位於classpath中!請檢查您的情況是否屬於這種情況。 (在Eclipse中右鍵單擊src \ main \ resources' - >「Build Path」 - >「用作源文件夾」) –

+0

我正在使用IntelliJ Ultimate Edition,資源設置爲默認資源文件夾 –

相關問題