1. 使用方法
Java の getResourceAsStream には次の型があります。
- Class.getResourceAsStream(String path) : パスが'/' で始まらない場合、リソースはデフォルトでこのクラスが配置されているパッケージから取得され、'/' で始まる場合はルートから取得されます。クラスパス。パスを介して絶対パスを構築するだけで、最終的に ClassLoader がリソースを取得します。
- Class.getClassLoader.getResourceAsStream(String path) : デフォルトでは、ClassPath のルートからリソースを取得します。パスを '/' で始めることはできず、最後に ClassLoader がリソースを取得します。
- ServletContext.getResourceAsStream(String path) : デフォルトでは、リソースは WebAPP のルート ディレクトリから取得されます。Tomcat の下のパスが '/' で始まるかどうかは関係ありません。もちろん、これは特定のコンテナ実装に関連します。
- Jsp 下のアプリケーション組み込みオブジェクトは、上記の ServletContext の実装です。
たとえば、プロジェクト ディレクトリは次のとおりです。
|--project
|--src
|--com.x
|--file
|--myfile3.xml
|--y
|--Test.java
|--myfile.xml
|--file
|--myfile2.xml
|--target
|--com.x
|--file
|--myfile3.xml
|--y
|--Test.class
|--myfile.xml
|--file
|--myfile2.xml
getResourceAsStream の使用法はおおよそ次のとおりです。
1 つ目: ロードするファイルと .class ファイルは同じディレクトリにあります。たとえば、com.xy の下にクラス Test.class があり、同時にリソース ファイル myfile.xml があります。その場合、コードは次のようになります。
Test.class.getResourceAsStream("myfile.xml");
2 番目: リソース ファイルは Test.class ディレクトリのサブディレクトリにあります。たとえば、リソース ファイル myfile2.xml は com.xyfile ディレクトリにあります。その場合、コードは次のようになります。
Test.class.getResourceAsStream("file/myfile2.xml");
3 番目: リソース ファイルが Test.class ディレクトリにもそのサブディレクトリにもありません (例: com.x.file ディレクトリ内のリソース ファイル myfile3.xml)。その場合、コードは次のようになります。
Test.class.getResourceAsStream("/com/x/file/myfile3.xml");
2. まとめ
まとめると、実は書き方は2通りあります。
最初:パスは「/」で始まります
このうち「/」はプロジェクトのルートディレクトリを表します。
Test.class.getResourceAsStream("/com/x/file/myfile3.xml");
2 番目: パスが「/」で始まっていない
現在のクラスのディレクトリを表します
Test.class.getResourceAsStream("myfile.xml");
Test.class.getResourceAsStream("file/myfile2.xml");