FileUtils.listFiles()在资源目录上



在我的项目中,我有一个resources目录,里面有my_directorymy_directory包含文本文件

我想循环这个目录:

URL resource = Resources.class.getResource("/my_directory");
File directory = new File(resource.getPath());
Collection<File> files = FileUtils.listFiles(directory, new String[]{"txt"}, true);

files collection包含所有.txt文件。

如果我在调试器中运行这个项目,它会很好地工作。然而,如果我构建项目jar文件,它给出了一个错误:

java.lang.IllegalArgumentException: Parameter 'directory' is not a directory

directory文件路径为:

/home/hsz/.../lib/my_project.jar!/my_directory

如何在资源目录上使用Apache的FileUtils ?

当文件/目录被捆绑在.jar文件中时,它们不再被视为File对象。可以通过获取输入流(如

)来读取它们。
InputStream input = getClass().getResourceAsStream("my_directory/file");

我建议您保留文件系统中包含文件的文件夹,并进行您想要执行的操作。有没有什么原因,你想在这些操作之前将它们捆绑到一个jar中?

根据下面问题的答案,在Java 7中,您可以从JAR (zip)文件创建一个文件系统,然后使用NIO的目录遍历和过滤机制对其进行搜索。这将使编写处理jar和"分解"目录的代码变得更容易。你可以试试!

URL url = Resources.class.getResource("/my_directory");
URI uri = url.toURI();
if (uri.getScheme().equals("jar")) {
    // parse JAR file name
    String jarPath = uri.toString().replaceFirst("jar:file:", "").replaceFirst("!.*$", "");
    JarFile jar = new JarFile(URLDecoder.decode(jarPath, "UTF-8"));
    // loop through the entries in the JAR looking for ones in the proper directory
    Enumeration<JarEntry> entries = jar.entries();
    while(entries.hasMoreElements()) {
        String name = entries.nextElement().getName();
        if (name.startsWith(rootDirResource.substring(1))) // or a more complex check for *.txt files
            System.out.println("found: " + name);
    }
    jar.close();
}

相关内容

  • 没有找到相关文章

最新更新