web-dev-qa-db-ja.com

.jarファイル内のファイルへのアクセス

重複の可能性:
Java jarファイルからリソースファイルを読み取るにはどうすればよいですか?

何時間もグーグルした後、これを完全に狂わせ始めました。サイトで質問のバリエーションも見ましたが、うまくいかないようです。 JFrameはiniファイルからデータを読み取る必要があり、そのファイルを開くメソッドを作成しました。このファイルは、jarファイル内のresourcesというフォルダーに保存されます。

private BufferedReader openIniFile(String filename){
    BufferedReader brReader = null;                 
    try{
        File fileObj = new File(this.getClass().getResource("/resources/" + filename).toURI()); // The fileobject of the file to read
        if(fileObj.exists())                                            
            brReader = new BufferedReader(new FileReader(fileObj));                     

    } catch(Exception e){
        System.err.println("Exception while opening file: " + e.getMessage()); 

    }

    return null;
}

もちろん、これはコンパイル後にコードを実行しているときは完全に機能しますが、.jarファイルにエクスポートされた後に例外をスローします。 InputStream、FileInputStreamの使用を検討しましたが、機能するソリューションが見つからないようです。

Jarファイルにリソースを認識させるにはどうすればよいですか?

14
Chrizmo

リソースがJARファイルにある場合、それはもはやファイルではありません。ファイルは、ファイルシステム上の単なる物理ファイルです。解決策: getResourceAsStream を使用します。このようなもの:

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/" + filename)))
21
unbeli

ファイルを間違って読んでいます。ファイルがJARにある場合、Fileクラスを使用することはできません。代わりに、getResourceAsStream()を使用してファイルにInputStreamを取得する必要があります。

InputStream in = this.getClass().getResourceAsStream("/resources/" + filename);
4
Michael