2012-04-20 20 views
2

いくつかのプロパティをロード中には、人々がさまざまなアプローチが従っているファイルので、私が言った方法を使用して混乱していた...「getResourceAsStream」メソッドを使用するタイミングは?

Properties prop 
= new Properties(new FileInputStream(new File("<path of the properties file>")); 

といくつかは、ときに使用する1 ..

Properties prop 
= new Properties(getClass().getResourceAsStream("<path of the properties file>")); 

を使用していますか?

+2

(http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream) – Anonymous

+0

小さなNIT [FileInputStreamの対getResourceAsStream()]の可能重複 - 1つの以上の閉じ括弧が欠落 – fijiaaron

答えて

5

getResourceAsStreamあなたは、指定されたファイル/リソースのクラスパスを検索し、また、InputStreamsのリソースをJAR内部から提供することもできます。

したがって、物理ファイルシステムのあるフォルダ(たとえばユーザフォルダなど)にプロパティがある場合はFileInputStreamを使用し、ファイルがクラスパスに埋め込まれている場合(たとえば、JAR内のリソースとして)はgetResourceAsStreamを使用します。

0

ファイルの場所が環境間で変更されないことを100%確信している場合、最初の方法を使用できます。つまり、これらのディレクトリパスがすべての環境で作成されていることを確認するために、オーバーヘッド操作があることを意味します。反面、jarを開かずにプロパティファイルを更新する柔軟性があります。

2番目の方法は、クラスパスから読み込んだときに非常に移植性があります。しかし、プロパティの更新ごとにjarファイルを再バンドルするという欠点があります。

だから、基本的にあなたのユースケースに依存します。

2

ファイルシステムからファイルを読み取るときは、相対パスまたは絶対パスを使用してFileInputStream(File())を使用します。

あなたのプログラムがjarファイルとして配布されていて、そのjarファイル内にあるファイルをロードする必要がある場合、あなたはgetResourceAsStreamを(使用する必要がある)、それはファイルのクラスパスを検索し、パスがに相対的ですクラスパス

-1

Jarからファイルを読み込んでいるとき。クラスローダーのgetResourceまたはgetResoureAsstreamを使用してください。以下のコードスニペットを見て、Jarからファイルを読み込みます。上記の方法では、jarファイルを読み取ることはできません。

InputStream in = this.getClass().getClassLoader() 
      .getResourceAsStream("com/net/resources/config.properties"); 

    InputStream is = Thread.currentThread().getContextClassLoader() 
      .getResourceAsStream("com/net/resources/config.properties"); 

    URL url = this.getClass().getClassLoader() 
      .getResource("com/net/resources/config.properties"); 
関連する問題