InputStream としてファイルをロードする: さまざまなアプローチとそれらを使用する場合
InputStream としてファイルをロードするには、いくつかの方法があります。それぞれ独自のニュアンスを持って使用できます。この記事では、一般的に使用される 3 つのアプローチの違いについて詳しく説明します。
Class.getResourceAsStream(fileName):
このメソッドは、fileName をそれを呼び出すクラスのパッケージに対する相対パス。たとえば、String.class.getResourceAsStream("myfile.txt") は、「java/lang/myfile.txt」のクラスパス内でファイル「myfile.txt」を検索します。パスが「/」で始まる場合、絶対パスを示し、クラスパス ルートから検索を開始します。
ClassLoader.getResourceAsStream(fileName):
Class.getResourceAsStream() とは異なり、このメソッドはすべてのパスを絶対パスとして扱います。 String.class.getClassLoader().getResourceAsStream("myfile.txt") と String.class.getClassLoader().getResourceAsStream("/myfile.txt") は両方とも、次のクラスパスでファイル "myfile.txt" を検索します。 "./myfile.txt."
Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName):
このメソッドはリソースを処理する現在のスレッドに関連付けられたコンテキスト クラスローダーを使用するため、アプリケーション サーバーからクラスやファイルをロードする場合に適しています。
各メソッドを使用する場合:
ファイルとクラスが同じ jar に存在する特定のシナリオWebSphere 6.1 にデプロイされた EAR ファイルの場合は、Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName) を使用する必要があります。これは、アプリケーション サーバーのコンテキスト クラスローダーを考慮するためです。
Tomcat 7 以前のユーザーに対する警告:
ただし、Tomcat 7 またはそれを使用している場合は、次の注意点に注意してください。以前。上記の説明は概ね適切ですが、Tomcat のバージョン 6 と 7 では、findResource(String name) メソッドでのリソースの正規化の処理が異なるようです。その結果、これらのバージョンでは、classLoader.getResourceAsStream("/resource.txt") と classLoader.getResourceAsStream("resource.txt") が同じ結果を生成しない可能性があります。以前の Tomcat バージョンでこれらのメソッドを使用する場合は注意してください。
以上がJavaでファイルをInputStreamとしてロードするための適切な方法を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。