दिलचस्प पोस्ट
जन्म तिथि और प्राप्त दर () पर आधारित आयु (साल में) की गणना कैसे करें सर्वश्रेष्ठ प्रैक्टिस: HTML आईडी या नाम विशेषता से एक्सेस फॉर्म तत्व? ओ (लॉग एन) क्या मतलब है? पहुंच उल्लंघन अपवाद पकड़ने? एक html टैग से सभी विशेषताओं को निकालें कैसे गिट में एक टैग अंक कमाने के लिए कहने के लिए? MVC4 में ब्राउजर बैक बटन क्लिक ब्राउजर कैश कैसे साफ़ करें? कैसे Jsoup का उपयोग कर HTTPS के माध्यम से कनेक्ट करने के लिए? छवि पर पाठ की उपस्थिति का पता लगाने के लिए एल्गोरिथ्म एंड्रॉइड एपीआई में निचले 21 में वेक्टर डिज़ेबल्स का उपयोग कैसे करें? जावा में स्ट्रिंग अपरिवर्तनीय क्यों है? मैं कैसे जांच सकता हूं कि एक दो-आयामी NumPy सरणी में इसके अंदर मानों का एक विशिष्ट पैटर्न है? क्यों नंपी में 0d सरणियों को स्केलर नहीं माना जाता है? केवल सीएसएस के साथ छवि हॉवर पर काले पारदर्शी ओवरले? लूप के बाद मेरे बास काउंटर रीसेट क्यों करता है

कैसे जावा में फ़ाइलों को फिर से खोलना?

मेरे पास ज़िप फ़ाइल है जिसमें कुछ अन्य ज़िप फ़ाइलें शामिल हैं I उदाहरण के लिए मेल फ़ाइल abc.zip है और इसमें xyz.zip, class1.java, class2.java है। और xyz.zip में फ़ाइल class3.java और class4.java है।

इसलिए मुझे java को एक फ़ोल्डर में ज़िप फ़ाइल निकालने की आवश्यकता है जिसमें class1.java, class2.java, class3.java और class4.java होना चाहिए।

वेब के समाधान से एकत्रित समाधान "कैसे जावा में फ़ाइलों को फिर से खोलना?"

यह समाधान पहले से ही पोस्ट किए गए पिछले समाधानों के समान है, लेकिन यह एक अनज़िप पर उचित फ़ोल्डर संरचना को पुनः बनाता है।

static public void extractFolder(String zipFile) throws ZipException, IOException { System.out.println(zipFile); int BUFFER = 2048; File file = new File(zipFile); ZipFile zip = new ZipFile(file); String newPath = zipFile.substring(0, zipFile.length() - 4); new File(newPath).mkdir(); Enumeration zipFileEntries = zip.entries(); // Process each entry while (zipFileEntries.hasMoreElements()) { // grab a zip file entry ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); File destFile = new File(newPath, currentEntry); //destFile = new File(newPath, destFile.getName()); File destinationParent = destFile.getParentFile(); // create the parent directory structure if needed destinationParent.mkdirs(); if (!entry.isDirectory()) { BufferedInputStream is = new BufferedInputStream(zip .getInputStream(entry)); int currentByte; // establish buffer for writing file byte data[] = new byte[BUFFER]; // write the current file to disk FileOutputStream fos = new FileOutputStream(destFile); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); // read and write until last byte is encountered while ((currentByte = is.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, currentByte); } dest.flush(); dest.close(); is.close(); } if (currentEntry.endsWith(".zip")) { // found a zip file, try to open extractFolder(destFile.getAbsolutePath()); } } } 

यहाँ कुछ पुराने कोड पर कुछ अनचाहे वाला कोड बेस है जो मेरे पास अनझिप किए गए फ़ाइलें था।

 public void doUnzip(String inputZip, String destinationDirectory) throws IOException { int BUFFER = 2048; List zipFiles = new ArrayList(); File sourceZipFile = new File(inputZip); File unzipDestinationDirectory = new File(destinationDirectory); unzipDestinationDirectory.mkdir(); ZipFile zipFile; // Open Zip file for reading zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ); // Create an enumeration of the entries in the zip file Enumeration zipFileEntries = zipFile.entries(); // Process each entry while (zipFileEntries.hasMoreElements()) { // grab a zip file entry ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); File destFile = new File(unzipDestinationDirectory, currentEntry); destFile = new File(unzipDestinationDirectory, destFile.getName()); if (currentEntry.endsWith(".zip")) { zipFiles.add(destFile.getAbsolutePath()); } // grab file's parent directory structure File destinationParent = destFile.getParentFile(); // create the parent directory structure if needed destinationParent.mkdirs(); try { // extract file if not a directory if (!entry.isDirectory()) { BufferedInputStream is = new BufferedInputStream(zipFile.getInputStream(entry)); int currentByte; // establish buffer for writing file byte data[] = new byte[BUFFER]; // write the current file to disk FileOutputStream fos = new FileOutputStream(destFile); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); // read and write until last byte is encountered while ((currentByte = is.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, currentByte); } dest.flush(); dest.close(); is.close(); } } catch (IOException ioe) { ioe.printStackTrace(); } } zipFile.close(); for (Iterator iter = zipFiles.iterator(); iter.hasNext();) { String zipName = (String)iter.next(); doUnzip( zipName, destinationDirectory + File.separatorChar + zipName.substring(0,zipName.lastIndexOf(".zip")) ); } } 

मैं ca.anderson4 लेता हूं और सूची ज़िपफ़ाइलों को हटा देता हूं और थोड़ा-थोड़ा लिखता हूं, यह वही है जो मुझे मिला है:

 public class Unzip { public void unzip(String zipFile) throws ZipException, IOException { System.out.println(zipFile);; int BUFFER = 2048; File file = new File(zipFile); ZipFile zip = new ZipFile(file); String newPath = zipFile.substring(0, zipFile.length() - 4); new File(newPath).mkdir(); Enumeration zipFileEntries = zip.entries(); // Process each entry while (zipFileEntries.hasMoreElements()) { // grab a zip file entry ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); File destFile = new File(newPath, currentEntry); destFile = new File(newPath, destFile.getName()); File destinationParent = destFile.getParentFile(); // create the parent directory structure if needed destinationParent.mkdirs(); if (!entry.isDirectory()) { BufferedInputStream is = new BufferedInputStream(zip .getInputStream(entry)); int currentByte; // establish buffer for writing file byte data[] = new byte[BUFFER]; // write the current file to disk FileOutputStream fos = new FileOutputStream(destFile); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); // read and write until last byte is encountered while ((currentByte = is.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, currentByte); } dest.flush(); dest.close(); is.close(); } if (currentEntry.endsWith(".zip")) { // found a zip file, try to open unzip(destFile.getAbsolutePath()); } } } public static void main(String[] args) { Unzip unzipper=new Unzip(); try { unzipper.unzip("test/test.zip"); } catch (ZipException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

मैंने परीक्षण किया और यह काम करता है

परीक्षण में मैंने देखा File.mkDirs () विंडोज़ के तहत काम नहीं करता …

/ ** * दिए गए पूर्ण पथ नाम के लिए सभी मूल निर्देशिकाओं को पुन: बनाएँ ** /

  private void createParentHierarchy(String parentName) throws IOException { File parent = new File(parentName); String[] parentsStrArr = parent.getAbsolutePath().split(File.separator == "/" ? "/" : "\\\\"); //create the parents of the parent for(int i=0; i < parentsStrArr.length; i++){ StringBuffer currParentPath = new StringBuffer(); for(int j = 0; j < i; j++){ currParentPath.append(parentsStrArr[j]+File.separator); } File currParent = new File(currParentPath.toString()); if(!currParent.isDirectory()){ boolean created = currParent.mkdir(); if(isVerbose)log("creating directory "+currParent.getAbsolutePath()); } } //create the parent itself if(!parent.isDirectory()){ boolean success = parent.mkdir(); } } 

खोलना के बाद किसी को ज़िप फ़ाइल को बंद करना चाहिए।

 static public void extractFolder(String zipFile) throws ZipException, IOException { System.out.println(zipFile); int BUFFER = 2048; File file = new File(zipFile); ZipFile zip = new ZipFile(file); try { ...code from other answers ( ex. NeilMonday )... } finally { zip.close(); } } 

जैसा कि मुझे जरूरत थी, संशोधित किया गया तो सबसे अच्छे जवाबों में थोड़ा मिला। यह संस्करण होगा:

  • फिर से दिए गए स्थान पर एक ज़िप निकालें

  • खाली निर्देशिका बनाएं

  • ज़िप को ठीक से बंद करें


 public static void unZipAll(File source, File destination) throws IOException { System.out.println("Unzipping - " + source.getName()); int BUFFER = 2048; ZipFile zip = new ZipFile(source); try{ destination.getParentFile().mkdirs(); Enumeration zipFileEntries = zip.entries(); // Process each entry while (zipFileEntries.hasMoreElements()) { // grab a zip file entry ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); File destFile = new File(destination, currentEntry); //destFile = new File(newPath, destFile.getName()); File destinationParent = destFile.getParentFile(); // create the parent directory structure if needed destinationParent.mkdirs(); if (!entry.isDirectory()) { BufferedInputStream is = null; FileOutputStream fos = null; BufferedOutputStream dest = null; try{ is = new BufferedInputStream(zip.getInputStream(entry)); int currentByte; // establish buffer for writing file byte data[] = new byte[BUFFER]; // write the current file to disk fos = new FileOutputStream(destFile); dest = new BufferedOutputStream(fos, BUFFER); // read and write until last byte is encountered while ((currentByte = is.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, currentByte); } } catch (Exception e){ System.out.println("unable to extract entry:" + entry.getName()); throw e; } finally{ if (dest != null){ dest.close(); } if (fos != null){ fos.close(); } if (is != null){ is.close(); } } }else{ //Create directory destFile.mkdirs(); } if (currentEntry.endsWith(".zip")) { // found a zip file, try to extract unZipAll(destFile, destinationParent); if(!destFile.delete()){ System.out.println("Could not delete zip"); } } } } catch(Exception e){ e.printStackTrace(); System.out.println("Failed to successfully unzip:" + source.getName()); } finally { zip.close(); } System.out.println("Done Unzipping:" + source.getName()); } 

नील मौसम के जवाब के समान, लेकिन रिक्त निर्देशिका निकालता है:

 static public void extractFolder(String zipFile) throws ZipException, IOException { System.out.println(zipFile); int BUFFER = 2048; File file = new File(zipFile); ZipFile zip = new ZipFile(file); String newPath = zipFile.substring(0, zipFile.length() - 4); new File(newPath).mkdir(); Enumeration zipFileEntries = zip.entries(); // Process each entry while (zipFileEntries.hasMoreElements()) { // grab a zip file entry ZipEntry entry = (ZipEntry) zipFileEntries.nextElement(); String currentEntry = entry.getName(); File destFile = new File(newPath, currentEntry); //destFile = new File(newPath, destFile.getName()); File destinationParent = destFile.getParentFile(); // create the parent directory structure if needed destinationParent.mkdirs(); if (!entry.isDirectory()) { BufferedInputStream is = new BufferedInputStream(zip .getInputStream(entry)); int currentByte; // establish buffer for writing file byte data[] = new byte[BUFFER]; // write the current file to disk FileOutputStream fos = new FileOutputStream(destFile); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); // read and write until last byte is encountered while ((currentByte = is.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, currentByte); } dest.flush(); dest.close(); is.close(); } else{ destFile.mkdirs() } if (currentEntry.endsWith(".zip")) { // found a zip file, try to open extractFolder(destFile.getAbsolutePath()); } } } 
 File dir = new File("BASE DIRECTORY PATH"); FileFilter ff = new FileFilter() { @Override public boolean accept(File f) { //only want zip files return (f.isFile() && f.getName().toLowerCase().endsWith(".zip")); } }; File[] list = null; while ((list = dir.listFiles(ff)).length > 0) { File file1 = list[0]; //TODO unzip the file to the base directory }