मेरा एप्लिकेशन सर्वर से ज़िप फ़ाइल डाउनलोड कर रहा है और इस ज़िप फ़ाइल को निकाला है और फ़ाइलों को एसडी कार्ड में सहेज रहा है लेकिन समस्या यह है कि अगर मैं 4-5 एमबी ज़िप फ़ाइलों को डाउनलोड कर रहा हूं और इसे निकाल रहा हूं, तो यह काम कर रहा है अच्छा लेकिन अगर मैं 30-35 एमबी ज़िप फ़ाइल डाउनलोड कर रहा हूं तो यह मुझे त्रुटि देगा, मेरे खराब अंग्रेजी संचार के लिए खेद है।एंड्रॉइड में ज़िप फ़ाइल डाउनलोड और निकालें
नीचे के लिए डाउनलोड & खोल दो ज़िप फ़ाइल मेरी कोड है: -
public class UnzipManager {
private static String BASE_FOLDER;
public static Context localContext;
public static String passurl;
public static int count;
public static Context context;
/*
* You can use this flag to check whether Unzippingthread is still running..
*/
public static boolean isDownloadInProgress;
/*
* After unzipping using this flag ,you can check whether any low memory
* exceptions Occurred or not..and alert user accordingly..
*/
public static boolean isLowOnMemory;
public static int i = 0;
public static ZipEntry zipEntry;
public static void startUnzipping(Context ctx, int c, String url) {
context = ctx;
count = c;
/*
* MAKE SURE THAT localContext VARIABLE HAS BEEN INITIALIZED BEFORE
* INVOKING THIS METHOD.
*
* ALSO MAKE SURE YOU HAVE SET "INTERNET" AND "NETWORK ACCESS STATE"
* PERMISSIONS IN APPLICATION'S MANIFEST FILE.
*/
Log.d("DEBUG", "In startUnzipping()");
UnzipManager.BASE_FOLDER = Environment.getExternalStorageDirectory()
+ File.separator + "samples";
/*
*
*/
Log.d("DEBUG", "BASE_FOLDER:" + UnzipManager.BASE_FOLDER);
UnzipManager.isLowOnMemory = false;
// Start unzipping in a thread..which is safer
// way to do high cost processes..
passurl = url;
new UnzipThread().start();
}
private static class UnzipThread extends Thread {
@Override
public void run() {
UnzipManager.isDownloadInProgress = true;
Log.d("DEBUG", "Unzipping----------------------------");
URLConnection urlConnection;
try {
/************************************************
*
* IF you are unzipping a zipped file save under some URL in
* remote server
* **********************************************/
URL finalUrl = new URL(passurl
/* Url string where the zipped file is stored... */);
urlConnection = finalUrl.openConnection();
// Get the size of the (zipped file's) inputstream from
// server..
int contentLength = urlConnection.getContentLength();
Log.d("DEBUG", "urlConnection.getContentLength():"
+ contentLength);
/*****************************************************
*
* YOU CAN GET INPUT STREAM OF A ZIPPED FILE FROM ASSETS FOLDER
* AS WELL..,IN THAT CASE JUST PASS THAT INPUTSTEAM OVER
* HERE...MAKE SURE YOU HAVE SET STREAM CONTENT LENGTH OF THE
* SAME..
*
******************************************************/
ZipInputStream zipInputStream = new ZipInputStream(
urlConnection.getInputStream());
/*
* Iterate over all the files and folders
*/
for (zipEntry = zipInputStream.getNextEntry(); zipEntry != null; zipEntry = zipInputStream
.getNextEntry()) {
Log.d("DEBUG", "Extracting: " + zipEntry.getName() + "...");
/*
* Extracted file will be saved with same file name that in
* zipped folder.
*/
String innerFileName = BASE_FOLDER + File.separator
+ zipEntry.getName();
File innerFile = new File(innerFileName);
/*
* Checking for pre-existence of the file and taking
* necessary actions
*/
if (innerFile.exists()) {
Log.d("DEBUG",
"The Entry already exits!, so deleting..");
innerFile.delete();
}
/*
* Checking for extracted entry for folder type..and taking
* necessary actions
*/
if (zipEntry.isDirectory()) {
Log.d("DEBUG", "The Entry is a directory..");
innerFile.mkdirs();
} else {
Log.d("DEBUG", "The Entry is a file..");
FileOutputStream outputStream = new FileOutputStream(
innerFileName);
final int BUFFER_SIZE = 2048;
/*
* Get the buffered output stream..
*/
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
outputStream, BUFFER_SIZE);
/*
* Write into the file's buffered output stream ,..
*/
int count = 0;
byte[] buffer = new byte[BUFFER_SIZE];
while ((count = zipInputStream.read(buffer, 0,
BUFFER_SIZE)) != -1) {
bufferedOutputStream.write(buffer, 0, count);
}
/***********************************************
* IF YOU WANT TO TRACK NO OF FILES DOWNLOADED, HAVE A
* STATIC COUNTER VARIABLE, INITIALIZE IT IN
* startUnzipping() before calling startUnZipping(), AND
* INCREMENT THE COUNTER VARIABLE OVER HERE..LATER YOU
* CAN USE VALUE OF COUNTER VARIABLE TO CROSS VERIFY
* WHETHER ALL ZIPPED FILES PROPERLY UNZIPPED AND SAVED
* OR NOT.
*
* ************************************************
*/
/*
* Handle closing of output streams..
*/
bufferedOutputStream.flush();
bufferedOutputStream.close();
}
/*
* Finish the current zipEntry
*/
zipInputStream.closeEntry();
}
/*
* Handle closing of input stream...
*/
zipInputStream.close();
Log.d("DEBUG", "--------------------------------");
Log.d("DEBUG", "Unzipping completed..");
i = 1;
} catch (IOException e) {
Log.d("DEBUG", "Exception occured: " + e.getMessage());
if (e.getMessage().equalsIgnoreCase("No space left on device")) {
UnzipManager.isLowOnMemory = true;
}
e.printStackTrace();
}
MainActivity.pd.dismiss();
((MainActivity)context).finish();
UnzipManager.isDownloadInProgress = false;
}
};
}
Logcat त्रुटि है: -
02-17 12:21:16.835: D/DEBUG(20562): Exception occured: /mnt/sdcard/samples/iPhone_zendura_Q4a/0.png (No such file or directory)
02-17 12:21:16.835: W/System.err(20562): java.io.FileNotFoundException: /mnt/sdcard/samples/iPhone_zendura_Q4a/0.png (No such file or directory)
02-17 12:21:16.906: W/System.err(20562): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
02-17 12:21:16.906: W/System.err(20562): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
02-17 12:21:16.906: W/System.err(20562): at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
02-17 12:21:16.906: W/System.err(20562): at java.io.FileOutputStream.<init>(FileOutputStream.java:165)
02-17 12:21:16.906: W/System.err(20562): at java.io.FileOutputStream.<init>(FileOutputStream.java:144)
02-17 12:21:16.906: W/System.err(20562): at com.android.screens.UnzipManager$UnzipThread.run(UnzipManager.java:129)
त्रुटि स्पष्ट है। – JoxTraex
हैलो जोक्सट्रैक्स, कृपया मुझे समाधान दें ... –
@Downvoter मुझे डाउनवोट के कारण दें ताकि मैं इसे बेहतर बना सकूं। –