एक ज़िप फ़ोल्डर और इसके सबफ़ोल्डर के अंदर फ़ाइलों की सूची

मैं एक ज़िप फ़ाइल के अंदर फ़ाइलों की सूची प्राप्त करने का एक तरीका देख रहा हूं। मैंने निर्देशिका के अंदर फ़ाइलों की सूची प्राप्त करने के लिए एक विधि बनाई है, लेकिन मैं ज़िप फ़ाइल के अंदर फ़ाइलों को प्राप्त करने के लिए भी एक तरीका ढूंढ रहा हूं, साथ ही बस ज़िप फ़ाइल दिखाने की बजाय।

यहां मेरी विधि है:

public ArrayList 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;
}
1

2 उत्तर

थोड़ी देर के लिए बेहतर जवाब खोजने के बाद, मुझे अंत में ऐसा करने का एक बेहतर तरीका मिला। जावा एनआईओ एपीआई (जावा 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() {
    @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.
});

इस दृष्टिकोण का लाभ यह है कि आप किसी भी फाइल सिस्टम को इस तरह से ट्रैक कर सकते हैं: आपकी सामान्य विंडो या यूनिक्स फाइल सिस्टम, फ़ाइल सिस्टम में ज़िप या जार, या किसी अन्य वास्तव में निहित होता है।

Files.copy() , फ़ाइल जैसे विधियों का उपयोग करके आप फ़ाइलें कक्षा के माध्यम से किसी भी Files कक्षा के माध्यम से त्रिकोणीय रूप से सामग्री को पढ़ सकते हैं। readAllLines() , File.readAllBytes() , आदि ...

2
जोड़ा

आप पुनरावृत्ति के माध्यम से फ़ाइलों की सूची को पढ़ने के लिए 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
    }
}
1
जोड़ा
मैं ज़िप फ़ाइल नाम मैन्युअल रूप से नहीं देना चाहता हूं, जब मैं निर्देशिका पथ देता हूं तो मुझे गतिशील व्यवहार चाहिए तो विधि को इस निर्देशिका के अंदर सभी ज़िप फ़ाइलों पर इस ऑपरेशन को करना चाहिए
जोड़ा लेखक user2614607, स्रोत
बस ज़िप फ़ाइलों की सूची के माध्यम से जाओ .. मैं पोस्ट अद्यतन।
जोड़ा लेखक tokhi, स्रोत