दिलचस्प पोस्ट
OpenCV 2.4.3 आईओएस ढाँचा कंपाइलर कुछ सी + हेडर पहचानने में परेशानी वर्क ओवरले में टेक्स्ट खींचें NSMutableArray initWithCapacity बारीकियों गूगल क्रोम गूगल क्रोम पर प्रतिपादन नहीं कर रहे हैं सी: मुझे पाउ (10,2) और पाउ ​​(10, जे), जे 2 = के साथ अलग-अलग परिणाम मिला। वसंत सुरक्षा में कस्टम फ़िल्टर कैसे लिख सकता है? जावास्क्रिप्ट में अप्रत्यक्ष फ़ंक्शन कॉल https के बिना क्रोम 47 में getUserMedia () प्राप्त करें Nodejs प्रतिक्रिया में फ़ाइल भेजें एएम / पीएम मार्कर के साथ दिनांक टाइम-स्ट्रिंग पार्स करने में असमर्थ प्रारूप एक्सएमएल स्ट्रिंग को फ्रेंडली एक्सएमएल स्ट्रिंग प्रिंट करें किसी एप्लिकेशन में कस्टम फ़ील्ड का समर्थन करने के लिए डिजाइन पैटर्न क्या हैं? पाठ सरलीकरण के लिए उपकरण (जावा) वर्तमान विज़िटर से संस्कृतिइन्फो प्राप्त करें और उस पर आधारित संसाधनों की स्थापना करें? जब एमुलेटर में एक एंड्रॉइड एप्लिकेशन चल रहा है, तो मुझे कैसे पता लगा सकता है?

एंड्रॉइड में प्रोग्राम को कैसे खोलें?

मुझे एक छोटा कोड स्निपेट की आवश्यकता है जो किसी दिए गए .zip फ़ाइल से कुछ फ़ाइलों को खोलता है और अलग-अलग फाइलों को प्रारूप के अनुसार देता है जो वे ज़िप फ़ाइल में होती थी। कृपया अपना ज्ञान पोस्ट करें और मेरी सहायता करें

Solutions Collecting From Web of "एंड्रॉइड में प्रोग्राम को कैसे खोलें?"

अगर पोंनो के संस्करण थोड़ा अनुकूलित था प्रदर्शन में वृद्धि संभव है।

private boolean unpackZip(String path, String zipname) { InputStream is; ZipInputStream zis; try { String filename; is = new FileInputStream(path + zipname); zis = new ZipInputStream(new BufferedInputStream(is)); ZipEntry ze; byte[] buffer = new byte[1024]; int count; while ((ze = zis.getNextEntry()) != null) { // zapis do souboru filename = ze.getName(); // Need to create directories if not exists, or // it will generate an Exception... if (ze.isDirectory()) { File fmd = new File(path + filename); fmd.mkdirs(); continue; } FileOutputStream fout = new FileOutputStream(path + filename); // cteni zipu a zapis while ((count = zis.read(buffer)) != -1) { fout.write(buffer, 0, count); } fout.close(); zis.closeEntry(); } zis.close(); } catch(IOException e) { e.printStackTrace(); return false; } return true; } 

वासिली सोचेंस्की के उत्तर के आधार पर थोड़ा सा tweaked और एक छोटे से सुधार के साथ:

 public static void unzip(File zipFile, File targetDirectory) throws IOException { ZipInputStream zis = new ZipInputStream( new BufferedInputStream(new FileInputStream(zipFile))); try { ZipEntry ze; int count; byte[] buffer = new byte[8192]; while ((ze = zis.getNextEntry()) != null) { File file = new File(targetDirectory, ze.getName()); File dir = ze.isDirectory() ? file : file.getParentFile(); if (!dir.isDirectory() && !dir.mkdirs()) throw new FileNotFoundException("Failed to ensure directory: " + dir.getAbsolutePath()); if (ze.isDirectory()) continue; FileOutputStream fout = new FileOutputStream(file); try { while ((count = zis.read(buffer)) != -1) fout.write(buffer, 0, count); } finally { fout.close(); } /* if time should be restored as well long time = ze.getTime(); if (time > 0) file.setLastModified(time); */ } } finally { zis.close(); } } 

उल्लेखनीय मतभेद

  • public static – यह एक स्थिर उपयोगिता पद्धति है जो कहीं भी हो सकती है।
  • 2 File मापदंडों क्योंकि String हैं: / फ़ाइलों के लिए और कोई यह निर्दिष्ट नहीं कर सकता कि ज़िप फ़ाइल को पहले निकाला जा सकता है। इसके अलावा path + filename सम्मिलन> https://stackoverflow.com/a/412495/995891
  • throws – क्योंकि देर से पकड़ो – अगर उनमें वास्तव में दिलचस्पी नहीं है तो एक प्रयास पकड़ो।
  • वास्तव में यह सुनिश्चित करता है कि सभी मामलों में आवश्यक निर्देशिका मौजूद हों। प्रत्येक ज़िप में फ़ाइल प्रविष्टियों के पहले सभी आवश्यक निर्देशिका प्रविष्टियां नहीं होतीं इसमें 2 संभावित बग थे:
    • अगर ज़िप में एक खाली निर्देशिका है और जिसके परिणामस्वरूप निर्देशिका के बजाय एक मौजूदा फ़ाइल है, इस पर ध्यान नहीं दिया गया था। mkdirs() का वापसी मूल्य महत्वपूर्ण है
    • ज़िप फाइलों पर क्रैश हो सकता है जो निर्देशिकाओं को शामिल नहीं करता है
  • बफर आकार में वृद्धि हुई, यह प्रदर्शन को थोड़ा सुधारना चाहिए। भंडारण आमतौर पर 4k ब्लॉकों में होता है और छोटे खंडों में लिखना आमतौर पर आवश्यक से धीमी है
  • संसाधन लीक को रोकने के finally में जादू का उपयोग करता है।

इसलिए

 unzip(new File("/sdcard/pictures.zip"), new File("/sdcard")); 

मूल के बराबर करना चाहिए

 unpackZip("/sdcard/", "pictures.zip") 

यह मेरी अनझिप पद्धति है, जिसका उपयोग मैं करता हूं:

 private boolean unpackZip(String path, String zipname) { InputStream is; ZipInputStream zis; try { is = new FileInputStream(path + zipname); zis = new ZipInputStream(new BufferedInputStream(is)); ZipEntry ze; while((ze = zis.getNextEntry()) != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int count; String filename = ze.getName(); FileOutputStream fout = new FileOutputStream(path + filename); // reading and writing while((count = zis.read(buffer)) != -1) { baos.write(buffer, 0, count); byte[] bytes = baos.toByteArray(); fout.write(bytes); baos.reset(); } fout.close(); zis.closeEntry(); } zis.close(); } catch(IOException e) { e.printStackTrace(); return false; } return true; } 

एंड्रॉइड में निर्मित जावा एपीआई है। Java.util.zip पैकेज देखें

ZipInputStream क्लास में आपको क्या देखना चाहिए ZipInputStream से ZipEntry पढ़ें और इसे फाइल सिस्टम / फ़ोल्डर में डंप करें ज़िप फ़ाइल में संक्षिप्त करने के लिए समान उदाहरण देखें

हालांकि, जो जवाब पहले से ही यहां हैं, वे अच्छी तरह से काम करते हैं, मुझे पता चला है कि उनके लिए उम्मीद की तुलना में वे थोड़ी धीमी थीं। इसके बजाय मैं ज़िप 4 जे का इस्तेमाल किया, जो मुझे लगता है कि इसकी गति के कारण सबसे अच्छा समाधान है। इसे संपीड़न की मात्रा के विभिन्न विकल्पों के लिए भी अनुमति दी गई है, जिसे मैंने उपयोगी पाया।

2016 में अद्यतन निम्न वर्ग का उपयोग करें

  package com.example.zip; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import android.util.Log; public class DecompressFast { private String _zipFile; private String _location; public DecompressFast(String zipFile, String location) { _zipFile = zipFile; _location = location; _dirChecker(""); } public void unzip() { try { FileInputStream fin = new FileInputStream(_zipFile); ZipInputStream zin = new ZipInputStream(fin); ZipEntry ze = null; while ((ze = zin.getNextEntry()) != null) { Log.v("Decompress", "Unzipping " + ze.getName()); if(ze.isDirectory()) { _dirChecker(ze.getName()); } else { FileOutputStream fout = new FileOutputStream(_location + ze.getName()); BufferedOutputStream bufout = new BufferedOutputStream(fout); byte[] buffer = new byte[1024]; int read = 0; while ((read = zin.read(buffer)) != -1) { bufout.write(buffer, 0, read); } bufout.close(); zin.closeEntry(); fout.close(); } } zin.close(); Log.d("Unzip", "Unzipping complete. path : " +_location ); } catch(Exception e) { Log.e("Decompress", "unzip", e); Log.d("Unzip", "Unzipping failed"); } } private void _dirChecker(String dir) { File f = new File(_location + dir); if(!f.isDirectory()) { f.mkdirs(); } } } 

कैसे इस्तेमाल करे

  String zipFile = Environment.getExternalStorageDirectory() + "/the_raven.zip"; //your zip file location String unzipLocation = Environment.getExternalStorageDirectory() + "/unzippedtestNew/"; // destination folder location DecompressFast df= new DecompressFast(zipFile, unzipLocation); df.unzip(); 

अनुमतियां

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

@ZAPL के उत्तर के अनुसार, प्रगति रिपोर्ट के साथ अनझिप करें:

 public interface UnzipFile_Progress { void Progress(int percent, String FileName); } // unzip(new File("/sdcard/pictures.zip"), new File("/sdcard")); public static void UnzipFile(File zipFile, File targetDirectory, UnzipFile_Progress progress) throws IOException, FileNotFoundException { long total_len = zipFile.length(); long total_installed_len = 0; ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile))); try { ZipEntry ze; int count; byte[] buffer = new byte[1024]; while ((ze = zis.getNextEntry()) != null) { if (progress != null) { total_installed_len += ze.getCompressedSize(); String file_name = ze.getName(); int percent = (int)(total_installed_len * 100 / total_len); progress.Progress(percent, file_name); } File file = new File(targetDirectory, ze.getName()); File dir = ze.isDirectory() ? file : file.getParentFile(); if (!dir.isDirectory() && !dir.mkdirs()) throw new FileNotFoundException("Failed to ensure directory: " + dir.getAbsolutePath()); if (ze.isDirectory()) continue; FileOutputStream fout = new FileOutputStream(file); try { while ((count = zis.read(buffer)) != -1) fout.write(buffer, 0, count); } finally { fout.close(); } // if time should be restored as well long time = ze.getTime(); if (time > 0) file.setLastModified(time); } } finally { zis.close(); } } 
 public class MainActivity extends Activity { private String LOG_TAG = MainActivity.class.getSimpleName(); private File zipFile; private File destination; private TextView status; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); status = (TextView) findViewById(R.id.main_status); status.setGravity(Gravity.CENTER); if ( initialize() ) { zipFile = new File(destination, "BlueBoxnew.zip"); try { Unzipper.unzip(zipFile, destination); status.setText("Extracted to \n"+destination.getAbsolutePath()); } catch (ZipException e) { Log.e(LOG_TAG, e.getMessage()); } catch (IOException e) { Log.e(LOG_TAG, e.getMessage()); } } else { status.setText("Unable to initialize sd card."); } } public boolean initialize() { boolean result = false; File sdCard = new File(Environment.getExternalStorageDirectory()+"/zip/"); //File sdCard = Environment.getExternalStorageDirectory(); if ( sdCard != null ) { destination = sdCard; if ( !destination.exists() ) { if ( destination.mkdir() ) { result = true; } } else { result = true; } } return result; } } 

-> हेल्पर क्लास (अनजिपर। जावा)

  import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipInputStream; import android.util.Log; public class Unzipper { private static String LOG_TAG = Unzipper.class.getSimpleName(); public static void unzip(final File file, final File destination) throws ZipException, IOException { new Thread() { public void run() { long START_TIME = System.currentTimeMillis(); long FINISH_TIME = 0; long ELAPSED_TIME = 0; try { ZipInputStream zin = new ZipInputStream(new FileInputStream(file)); String workingDir = destination.getAbsolutePath()+"/"; byte buffer[] = new byte[4096]; int bytesRead; ZipEntry entry = null; while ((entry = zin.getNextEntry()) != null) { if (entry.isDirectory()) { File dir = new File(workingDir, entry.getName()); if (!dir.exists()) { dir.mkdir(); } Log.i(LOG_TAG, "[DIR] "+entry.getName()); } else { FileOutputStream fos = new FileOutputStream(workingDir + entry.getName()); while ((bytesRead = zin.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } fos.close(); Log.i(LOG_TAG, "[FILE] "+entry.getName()); } } zin.close(); FINISH_TIME = System.currentTimeMillis(); ELAPSED_TIME = FINISH_TIME - START_TIME; Log.i(LOG_TAG, "COMPLETED in "+(ELAPSED_TIME/1000)+" seconds."); } catch (Exception e) { Log.e(LOG_TAG, "FAILED"); } }; }.start(); } } 

-> एक्सएमएल लेआउट (activity_main.xml):

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:id="@+id/main_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" /> </RelativeLayout> 

-> मैनिफ़ेस्ट फ़ाइल में अनुमति:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

यहां एक ज़िपफ़ाइल इटरेटर है (जैसे जावा इटरेटर, लेकिन ज़िप फ़ाइलों के लिए):

 package ch.epfl.bbp.io; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ZipFileIterator implements Iterator<File> { private byte[] buffer = new byte[1024]; private FileInputStream is; private ZipInputStream zis; private ZipEntry ze; public ZipFileIterator(File file) throws FileNotFoundException { is = new FileInputStream(file); zis = new ZipInputStream(new BufferedInputStream(is)); } @Override public boolean hasNext() { try { return (ze = zis.getNextEntry()) != null; } catch (IOException e) { e.printStackTrace(); } return false; } @Override public File next() { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int count; String filename = ze.getName(); File tmpFile = File.createTempFile(filename, "tmp"); tmpFile.deleteOnExit();// TODO make it configurable FileOutputStream fout = new FileOutputStream(tmpFile); while ((count = zis.read(buffer)) != -1) { baos.write(buffer, 0, count); byte[] bytes = baos.toByteArray(); fout.write(bytes); baos.reset(); } fout.close(); zis.closeEntry(); return tmpFile; } catch (Exception e) { throw new RuntimeException(e); } } @Override public void remove() { throw new RuntimeException("not implemented"); } public void close() { try { zis.close(); is.close(); } catch (IOException e) {// nope } } } 

न्यूनतम उदाहरण मैं अपने ज़िपफ़ाइल से एक विशिष्ट फ़ाइल को अपने अनुप्रयोग कैश फ़ोल्डर में खोलने के लिए उपयोग किया था मैं फिर एक अलग पद्धति का उपयोग करके मैनिफ़ेस्ट फ़ाइल पढ़ता हूं।

 private void unzipUpdateToCache() { ZipInputStream zipIs = new ZipInputStream(context.getResources().openRawResource(R.raw.update)); ZipEntry ze = null; try { while ((ze = zipIs.getNextEntry()) != null) { if (ze.getName().equals("update/manifest.json")) { FileOutputStream fout = new FileOutputStream(context.getCacheDir().getAbsolutePath() + "/manifest.json"); byte[] buffer = new byte[1024]; int length = 0; while ((length = zipIs.read(buffer))>0) { fout.write(buffer, 0, length); } zipIs .closeEntry(); fout.close(); } } zipIs .close(); } catch (IOException e) { e.printStackTrace(); } } 

इस लाइब्रेरी का उपयोग करें

ऐप के लिब फ़ोल्डर में इस जार फ़ाइल को जोड़ें

इस तरह अपने आयात की जाँच करें

 import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; 

इस तरह से नीचे विधि का उपयोग करें

 unzip("/sdcard/file.zip","/sdcard/unzipFolder") public static void unzip(String Filepath, String DestinationFolderPath) { try { ZipFile zipFile = new ZipFile(Filepath); List<FileHeader> fileHeaders = zipFile.getFileHeaders(); for(FileHeader fileHeader : fileHeaders) { String fileName = fileHeader.getFileName(); if (fileName.contains("\\")) { fileName=fileName.replace("\\","\\\\"); String[] Folders=fileName.split("\\\\"); StringBuilder newFilepath=new StringBuilder(); newFilepath.append(DestinationFolderPath); for (int i=0;i&lt; Folders.length-1;i++){ newFilepath.append(File.separator); newFilepath.append(Folders[i]); } zipFile.extractFile(fileHeader, newFilepath.toString(),null,Folders[Folders.length-1]); }else { zipFile.extractFile(fileHeader,DestinationFolderPath); } } } catch (ZipException e) { e.printStackTrace(); } } 

पासवर्ड संरक्षित ज़िप फ़ाइल

यदि आप पासवर्ड के साथ फ़ाइलों को संक्षिप्त करना चाहते हैं तो आप इस पुस्तकालय पर एक नज़र डाल सकते हैं जो आसानी से पासवर्ड के साथ फाइल ज़िप कर सकते हैं:

ज़िप:

 ZipArchive zipArchive = new ZipArchive(); zipArchive.zip(targetPath,destinationPath,password); 

अनज़िप:

 ZipArchive zipArchive = new ZipArchive(); zipArchive.unzip(targetPath,destinationPath,password); 

rar:

 RarArchive rarArchive = new RarArchive(); rarArchive.extractArchive(file archive, file destination); 

इस लाइब्रेरी का दस्तावेज़ीकरण काफी अच्छा है, मैंने वहां से कुछ उदाहरण जोड़े हैं। यह पूरी तरह से स्वतंत्र है और विशेष रूप से एंड्रॉइड के लिए लिखा है