2017-09-25 9 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(); 

読み取りは、入力ストリームを使用してファイルを読み取るデータベースのメソッドを呼び出します。

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 java.io.FileInputStream.open0(ネイティブ メソッド)、java.io.FileInputStream.open(FileInputStream.java:195)、 、java.io.FileInputStream(FileInputStream.java:138)のjava.io.FileInputStream.open0(そのようなファイルまたはディレクトリはありません) java.io.FileInputStream。(FileInputStream.java:93)at Core.Database.re私が何であるか見当がつかないのでMain.main(Main.java:51)... より11

の広告(Database.java:22)は、ディレクトリ内のファイル/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

あなたが含まれている実行中のjarファイル(内からファイルを読み取るためにgetResourceAsStreamを使用する必要がありますファイル内src\main\resources)!

+0

getResourcAsStreamを使用してファイルが見つかりません。 –

+0

使用する開発環境がわかりません。あなたがそれを実行する場合。 Eclipseでは、この呼び出しはjar内部からのものと同じように処理されるはずですが、jar内部には何がありますか?ルックアップはクラスパスに行き、 'src \ main \ resources'はクラスパスになければなりません!あなたのシナリオでこれが当てはまるかどうか確認してください。 (Eclipseで 'src \ main \ resources'を右クリック - >"ビルドパス " - >"ソースフォルダとして使用 ") –

+0

私はIntelliJ Ultimate Editionを使用しています、リソースはデフォルトリソースフォルダとして設定されています –

関連する問題