3

クラスパスのディレクトリ内に読み取りが必要なファイルのリストがあり、File API を使用したいと考えていますが、アーカイブ内ではそれができないようです。これはローカル環境の単体テストでは機能しますが、EAR 内に WAR としてデプロイすると、ファイルのリストが null を返します。

File dir = new File(getClass().getClassLoader().getResource("mydir").getPath());
File[] files = dir.listFiles();
4

2 に答える 2

2

war がアンパックされていない場合、File API は使用できませんが、Servlet API は使用できます。

ServletContextのgetResourcePathsメソッドを使用して「ディレクトリ」のすべてのメンバーを取得し、次にgetResourceまたはgetResourceAsStreamを使用してディレクトリ内のファイルの内容を取得できます。

for (String s : context.getResourcePaths("foo")) {
    InputStream contents = context.getResourceAsStream(s);
    //do something with the contents
}
于 2012-06-25T19:09:24.323 に答える
0

Java SE 7 を使用している場合は、次を試してください。

Path jarPath = Paths.get(...);
try (FileSystem jarFS = FileSystems.newFileSystem(jarPath, null)) {
    Path dirJarPath = jarFS.getPath("/foo/mydir");
    <use a FileVisitor and Files.walkFileTree>
}

http://docs.oracle.com/javase/7/docs/api/java/nio/file/FileVisitor.html

于 2012-06-25T19:07:07.727 に答える