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で彼をフォローしてください。 私のチュートリアルが気に入ったら、これらの慈善団体に寄付することを検討してください。