16

次のようなことができることはわかっています。

Class.class.getResourceAsStream("/com/youcompany/yourapp/module/someresource.conf")

jar ファイル内にパッケージ化されたファイルを読み取ります。

私はそれを何度もグーグルで検索しましたが、適切な用語を使用していないことは確かです。私がやりたいことは、次のような利用可能なリソースをリストすることです:

Class.class.listResources("/com/yourcompany/yourapp")

パッケージ内にあるリソースのリストを返す必要がありますcom.yourcompany.yourapp.*

それは可能ですか?私が示したように簡単に実行できない場合の方法についてのアイデアはありますか?

注:jarがどこにあるかを知り、それを開いてその内容を調べて、それを達成できることを私は知っています。しかし、今の環境ではそれができません。

4

5 に答える 5

10

JAR ファイル内のリソースの場合、次のように機能します。

URL url = MyClass.class.getResource("MyClass.class");
String scheme = url.getProtocol();
if (!"jar".equals(scheme))
  throw new IllegalArgumentException("Unsupported scheme: " + scheme);
JarURLConnection con = (JarURLConnection) url.openConnection();
JarFile archive = con.getJarFile();
/* Search for the entries you care about. */
Enumeration<JarEntry> entries = archive.entries();
while (entries.hasMoreElements()) {
  JarEntry entry = entries.nextElement();
  if (entry.getName().startsWith("com/y/app/")) {
    ...
  }
}

ファイル システムや他の多くのリポジトリで "展開" されたリソースでも同じことができますが、それほど簡単ではありません。サポートする URL スキームごとに特定のコードが必要です。

于 2009-04-14T22:34:40.653 に答える
4

一般に、このようなリソースのリストを取得することはできません。一部のクラスローダーはこれをサポートできない場合があります。Webサーバーから個々のファイルをフェッチできるクラスローダーを想像してみてください。ただし、Webサーバーはディレクトリの内容の一覧表示をサポートする必要はありません。もちろん、jarファイルの場合は、jarファイルの内容を明示的にロードできます。

この質問は似ています、ところで。)

于 2009-04-14T22:09:30.637 に答える
2

クラスローダーを使用してjarファイルの内容を一覧表示する方法を探していましたが、残念ながらこれは不可能のようです。代わりに、jarファイルをzipファイルとして開き、この方法でコンテンツを取得することができます。標準(ここ)の方法を使用してjarファイルの内容を読み取り、次にクラスローダーを使用して内容を読み取ることができます。

于 2009-04-14T22:08:33.227 に答える
-1

私は通常使用します

getClass().getClassLoader().getResourceAsStream(...)

しかし、事前に知らなくても、クラスパスからエントリをリストできるとは思えません。

于 2009-04-14T22:03:58.683 に答える