有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaFileUtils。资源目录上的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集合包含所有.txt文件

如果我在调试器中运行此项目,效果会很好。但是,如果我将项目构建到jar文件,它会给出一个错误:

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

directory文件路径为:

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

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


共 (2) 个答案

  1. # 1 楼答案

    当文件/目录捆绑在一个文件夹中时。jar文件,它们不再被视为File对象。它们可以通过获取它们的输入流来读取

    InputStream input = getClass().getResourceAsStream("my_directory/file");
    

    我建议您将包含文件的文件夹保存在文件系统中,并执行您想要执行的操作。在进行这些操作之前,您是否希望将它们捆绑到一个jar中

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

  2. # 2 楼答案

    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();
    }