2

たとえば、入力ソースに関しては、リソースの I/O を透過的に処理する Java 用の優れたライブラリはありますか。Java プロジェクト/フォルダーまたは jar アーカイブ?

次の場合に、アプリケーションでリソースを読み取るために同じコードを使用したいと考えています。

  1. Eclipse からコードを実行する (ソースから)
  2. デプロイされたアプリケーション (バイナリ) を実行する
  3. フォルダー (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 プロトコル ハンドラーを使用しようとしています。

インライン画像付きの JEditorPane

しかし、それを完全に理解しているかどうかはわかりません。プロジェクトでは、フォルダーが内部にある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 のコピー元:

インライン画像付きの JEditorPane

しかし、それが「myresources」フォルダー内のリソースをフェッチするのにどのように役立つかわかりません。私は明らかにこれを正しい方法で使用していません。

4

1 に答える 1

0

Java 7 には、zip ファイル システムとその他のファイル システムの一般化があります。

もちろん、URL プロトコル ハンドラを作成することもできます。

于 2012-12-12T20:07:29.577 に答える