当前位置: 首页 > 知识库问答 >
问题:

zip文件夹及其子文件夹中的文件列表

施景同
2023-03-14

我正在寻找一种方法来获取zip文件中的文件列表。我创建了一个方法来获取目录中的文件列表,但我也在寻找一种方法来获取zip文件中的文件,而不是只显示zip文件。

以下是我的方法:

public ArrayList<String> listFiles(File f, String min, String max) {
    try {
        // parse input strings into date format
        Date minDate = sdf.parse(min);
        Date maxDate = sdf.parse(max);
        //
        File[] list = f.listFiles();
        for (File file : list) {
            double bytes = file.length();
            double kilobytes = (bytes / 1024);
            if (file.isFile()) {
                String fileDateString = sdf.format(file.lastModified());
                Date fileDate = sdf.parse(fileDateString);
                if (fileDate.after(minDate) && fileDate.before(maxDate)) {
                    lss.add("'" + file.getAbsolutePath() + 
                        "'" + " Size KB:" + kilobytes + " Last Modified: " +
                        sdf.format(file.lastModified()));
                }
            } else if (file.isDirectory()) {
                listFiles(file.getAbsoluteFile(), min, max);
            }
        }
    } catch (Exception e) {
        e.getMessage();
    }
    return lss;
}

共有2个答案

林玮
2023-03-14

您可以使用ZipFile。entries()方法通过迭代读取文件列表,如下所示:

File[] fList = directory.listFiles();

for (File file : fList)
{
    ZipFile myZipFile = new ZipFile(fList.getName());

    Enumeration zipEntries = myZipFile.entries();

    while (zipEntries.hasMoreElements())
    {
        System.out.println(((ZipEntry) zipEntries.nextElement()).getName());
        // you can do what ever you want on each zip file
    }
}
充运浩
2023-03-14

在寻找了一段时间更好的答案后,我终于找到了一个更好的方法。实际上,您可以使用JavaNIOAPI(自Java7以来)以更通用的方式做同样的事情。

// this is the URI of the Zip file itself
URI zipUri = ...; 
FileSystem zipFs = FileSystems.newFileSystem(zipUri, Collections.emptyMap());

// The path within the zip file you want to start from
Path root = zipFs.getPath("/"); 

Files.walkFileTree(root, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
        // You can do anything you want with the path here
        System.out.println(path);
        // the BasicFileAttributes object has lots of useful meta data
        // like file size, last modified date, etc...
        return FileVisitResult.CONTINUE;
    }

    // The FileVisitor interface has more methods that 
    // are useful for handling directories.
});

这种方法的优点是,您可以通过这种方式遍历任何文件系统:正常的windows或Unix文件系统、包含在zip或jar中的文件系统,或者任何其他真正的文件系统。

然后,您可以通过文件类,使用文件之类的方法,轻松地读取任何路径的内容。复制()文件。readAllLines()文件。readAllBytes()等。。。

 类似资料:
  • 问题内容: 我如何返回一个包含该文件夹中的所有文件以及子文件夹的文件数组,我的方法仅适用于该文件夹,并且不包括子文件夹。 问题答案: 使用您当前的代码,进行以下调整:

  • 问题内容: 我对Swift编程非常陌生,并且正在尝试遍历文件夹中的文件。我在这里查看了答案,并尝试将其转换为Swift语法,但未成功。 我得到的错误是: 我的目的是查看主文件夹中包含的所有子文件夹和文件,并找到所有具有特定扩展名的文件,然后对它们进行处理。 问题答案: 使用以下方法:

  • 问题内容: 我尝试解压缩150个zip文件。所有zip文件都使用不同的名称,它们都分散在一个大文件夹中,该文件夹分为许多子文件夹和子子文件夹。我想将每个存档提取到与原始zip文件名相同名称的单独文件夹中,与原始zip文件位于同一位置。我的代码是: 我运行代码后,什么都没有发生。在此先感谢您的任何帮助。 问题答案: 更新: 最后,这段代码对我有用:

  • 我的Mercurial文件夹结构如下,“temp”位于文件夹的根目录中。 我想忽略临时文件夹及其子文件夹中的所有内容,除了名为“世界”的文件(只有“世界”而不是“1world”或“world.txt”等) 使用. hgignore中的语法:regexp,我可以匹配temp 任何指导都将不胜感激! 更新 通过手动列出每个文件夹,我成功地获得了想要的结果: 然而,我更希望我能用一个模式匹配所有子文件夹

  • 我尝试搜索一个命令,该命令可以使用命令提示符命令列出目录中的所有文件以及子文件夹。我已经阅读了“dir”命令的帮助,但找不到我要查找的内容。请帮助我什么命令可以得到这个。

  • Inno Setup:动态添加文件夹中的所有文件并添加组件标签,因此在运行设置期间,用户可以选择自定义设置并选择要复制的文件。 我想创建一个Inno安装文件,将抓取文件夹中的文件,用户可以放在那里,而不必每次添加新文件时修改Inno安装文件。同时,我需要安装文件的用户能够选择要复制的文件。 如果我做了这样的事情: 自定义设置仅显示复制或不复制整个文件夹的选项。