たとえば、入力ソースに関しては、リソースの I/O を透過的に処理する Java 用の優れたライブラリはありますか。Java プロジェクト/フォルダーまたは jar アーカイブ?
次の場合に、アプリケーションでリソースを読み取るために同じコードを使用したいと考えています。
- Eclipse からコードを実行する (ソースから)
- デプロイされたアプリケーション (バイナリ) を実行する
- フォルダー (src/bin) からリソースの一覧を取得します。
通常、私は:
URL resource = this.getClass().getClassLoader().getResource("someResource.ext");
リソースがクラスパス上にあると仮定すると、ソースとバイナリの両方から正常に機能します。ただし、一部のプロジェクトでは、サブフォルダーのみがクラスパスにあり、そのコンテンツはありません (すべてのファイルを個別のリソースとして指定する必要がないようにするため)。
project
src
resources
someResource.txt
subFolder
-> resA.txt
-> resB.txt
-> resC.txt
....
この場合、次のような低レベルのスパゲッティを実行する必要があります。
http://www.java-gaming.org/topics/how-to-check-if-a-url-is-a-directory/21435/view.html
私は apache.commons-io を見てきましたが、それは私が必要としているものではありません。src と bin の両方のネストされたフォルダー/リソースを処理する他のライブラリに関する提案はありますか?
編集:
以下で推奨されているように、ここで説明されているように、URL プロトコル ハンドラーを使用しようとしています。
しかし、それを完全に理解しているかどうかはわかりません。プロジェクトでは、フォルダーが内部にあるjarファイルに依存しています:
myjar.jar
myresources
> fileA.txt
> fileB.txt
> fileC.txt
私のアプリケーションでは、次のことを行います。
URL url = this.getClass().getClassLoader().getResource("myresources");
System.out.println(url.getPath());
Handler.install();
URLConnection con = new DataConnection(url);
try {
inputStream = con.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
DataConnection と Handler のコピー元:
しかし、それが「myresources」フォルダー内のリソースをフェッチするのにどのように役立つかわかりません。私は明らかにこれを正しい方法で使用していません。