List of files inside a zip folder and its subfolde

2019-09-19 12:52发布

I am looking a way to get the list of files inside a zip file. I created a method to get the list of files inside a directory but I am also looking a way to get files inside a zip as well instead of showing just zip file.

here is my method:

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

标签: java file io zip
2条回答
贼婆χ
2楼-- · 2019-09-19 13:24

You can use ZipFile.entries() method to read the list of files via iteration as below:

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
    }
}
查看更多
Ridiculous、
3楼-- · 2019-09-19 13:31

After having searched for a better answer for a while, I finally found a better way to do this. You can actually do the same thing in a more generic way using the Java NIO API (Since Java 7).

// 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.
});

This approach has the advantage that you can travers ANY file system this way: your normal windows or Unix filesystem, the file system contain contained within a zip or a jar, or any other really.

You can then trivially read the contents of any Path via the Files class, using methods like Files.copy(), File.readAllLines(), File.readAllBytes(), etc...

查看更多
登录 后发表回答