Java-リソースフォルダからファイルを読み取る
Javaでは、またはgetResource
を使用して、resources
フォルダーまたはクラスパスのルートから1つまたは複数のファイルを読み取ります。
getResourceAsStream
メソッドはInputStream
を返します。
getResource
メソッドはURL
を返し、通常はFile
に変換します。 JARファイルで機能していません。
リソースフォルダ内のファイル
1.1 src/main/resources
内のファイルを確認します。後でファイルにアクセスし、ファイルの内容を印刷します。
1.2デフォルトでは、Maven、Gradleなどのツールをビルドします、または一般的なJavaプラクティスでは、すべてのファイルがsrc/main/resources
からtarget/classes
またはbuild/classes
。したがって、src/main/resources
からファイルを読み取ろうとすると、プロジェクトのクラスパスのルートからファイルが読み取られます。
1.3以下はJARファイルの構造です。通常、resources
フォルダ内のファイルはクラスパスのルートにコピーされます。
リソースフォルダからファイルを取得します。
2.1以下の例は、getResourceAsStream
とファイルjson/file1.json
をresources
フォルダーから読み取り、ファイルの内容を印刷する方法。
注
-
getResource
メソッドがJARファイルで機能していません。 -
getResourceAsStream
メソッドはどこでも機能します。
出力
2.2ここで、プロジェクトをJARファイルにパックして実行します。今回は、getResource
が失敗し、NoSuchFileException
またはInvalidPathException
のいずれかを返します。リソースURLを介してJARファイル内のファイルを読み取ることはできません。
Linux(Ubuntu)でJARファイルを実行すると、NoSuchFileException
がスローされます。
WindowsでJARファイルを実行すると、InvalidPathException
がスローされます。
PSこれこの例では、Mavenプラグインmaven-jar-plugin
を使用してJARファイルを作成します。
リソースフォルダーからファイルを取得します–ユニットテスト
3.1ユニットテスト用に、テストリソースをフォルダーsrc/test/resources
に配置します。通常、テストリソース内のファイルはtarget/test-classes
フォルダーにコピーされます。
3.2動作しますsrc/main/resources
からファイルを読み取るのと同じ方法です。同じgetResourceAsStream
メソッドとgetResource
メソッドを使用して、src/test/resources
からファイルを読み取ります。
出力
リソースフォルダーからすべてのファイルを取得します。 (JAR以外の環境)
正確なファイル名がわからず、リソースフォルダーからサブフォルダーファイルを含むすべてのファイルを読み取りたい場合は、NIO ファイルに簡単にアクセスして読み取ることができます。
4.1次の例では、Files.walk
を使用してフォルダからすべてのファイルを読み取りますsrc/main/resources/json
:
出力
4.2ただし、標準のFiles.walk
は、JARファイル内のファイルに直接アクセスできません。JAR環境で例4.1を実行してみると、FileSystemNotFoundException
がスローされます。
リソースフォルダからすべてのファイルを取得します。 (JARバージョン)
5.1この例は、FileSystems
とURIを介してJARファイル内のフォルダーをFiles.walk
する方法を示しています。 jar:file:xxx.jar
。
アイデアは次のとおりです。
- ファイルは、すべてのファイル名を取得します。
getPathsFromResourceJAR()
を参照してください。 - すべてのファイル名をループし、例2.1のように各ファイルにアクセスして印刷します。
。
出力
ソースコードのダウンロード
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 –URIの構文と形式
- Maven –JARファイルの作成
- Zipファイルシステムプロバイダー
- JavaFiles.walkの例
- Java –実行中のJARファイルのパスを取得します
mkyong
Mkyong.comの創設者であり、Javaとオープンソースのものが大好きです。 Twitterで彼をフォローしてください。 私のチュートリアルが気に入ったら、これらの慈善団体に寄付することを検討してください。