2017-12-29 27 views
1

に私がバンドルされた.txtファイルからテキストを読み取るために読書テキストファイルは、IDEで動作しますが、.jarファイル

File file = new File("res/movies.txt"); 

を使用していません。私のコードは、IntelliJ IDEA内でプログラムを実行すると完全に動作しますが、.jarファイルを作成して実行すると「ファイルが見つかりません」というエラーが表示されます。 IDEとjarファイルの両方でコードを動作させるにはどうすればよいですか?

+1

ファイルがクラスパス上に読み取り専用「リソース」として配置されている場合(にjar)、あなたはJon Skeetの答えと同じようにInputStreamとして取得できます。ファイルは、オペレーティングシステムのファイルシステム用です。 –

答えて

8

movies.jarある前提としています。 Class.getResourceAsStreamまたはClassLoader.getResourceAsStreamを使用できます。それぞれはリソースに対してInputStreamを返します。

InputStreamを取得したら、適切なエンコーディングを指定してInputStreamReaderにラップして、そこからテキストを読み取ります。

は、あなたがリソースから読み込まれ、任意のファイルから読み込ん時々、時にはに必要がある場合、それはファイルやリソースのための上記の方法のいずれかのFileInputStreamを作成するのいずれかに別々のパスを使用するのが最善ですが、それ以降はすべて同じことをやってください。ここ

コードと同じJARファイルにバンドルされるべきであるresources/names.txtから各ラインを印刷する例は次のとおり

package example; 

import java.io.*; 
import java.nio.charset.*; 

public class Test { 
    public static void main(String[] args) throws IOException { 
     try (BufferedReader reader = new BufferedReader(
      new InputStreamReader(
       Test.class.getResourceAsStream("/resources/names.txt"), 
       StandardCharsets.UTF_8))) { 
      String line; 
      while ((line = reader.readLine()) != null) { 
       System.out.println(line); 
      } 
     } 
    } 
} 
+0

私はあなたがここで何を意味するのか理解するのに苦労しています。投稿を編集して、実際に使用するコードを追加できますか?ありがとう。 – Mikkel

+0

@Mikkel:私は例を追加しましたが、私はいくつかの研究があなた自身でそこにある可能性があると考えています。 –

-4

ファイルファイル=新しいファイル( "RES/movies.txt")を変更してみてください。

へのファイルファイル=新しいファイル( "RES/movies.jar");当然の

これは、ファイル名はあなたがリソースとしてファイルをロードする必要があり

+0

いいえ、要点は、テキストファイルが* jarファイル内にあることです。 –

+0

申し訳ありません質問を誤読 – Kip242

関連する問題