我想从特定的zip链接下载zip文件,然后在android中解压缩该zip文件。我该怎么办?我可以使用android下载管理器吗?使用下载管理器下载zip文件
2
A
回答
6
是的,你可以使用它,这里是一个小片段:
DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request req = new DownloadManager.Request(Uri.parse("url-of-the-zip"));
req.setDestinationExternalFilesDir(Environment.DIRECTORY_DOWNLOADS, "filename.zip");
long id = dm.enqueue(req);
的ID以后可以用来请求使用DownloadManager.getUriForDownloadedFile(int)下载的文件的本地URI。要解压文件,你可以使用ZipFile
5
嗨下载的zip文件路径如下显示,
URL url = new URL("ZIP_FILE");
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
int lenghtOfFile = c.getContentLength();
// Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
Long size = Long.parseLong(String.valueOf(input.available()));
StatFs stat = new StatFs(activity.getParent().getFilesDir().getAbsolutePath());
long freeBytes = ((long)stat.getAvailableBlocks()) * stat.getBlockSize();
// Log.e("TOTAL AVAILABLE", "@"+input.available() + " FREE" + freeBytes);
if(freeBytes >= size){
// String outFilePath = Environment.getExternalStorageDirectory().toString();
String path = outFilePath +"/TEST";
File myNewFolder = new File(path);
if (!myNewFolder.isDirectory()) {
myNewFolder.mkdirs();
}
path = path+"/"+"FileName";
OutputStream output = new FileOutputStream(path);
byte data[] = new byte[1024];
long total = 0;
int count = 0;
publishProgress(0);
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
//path your save location
}
解压码是
public void unzipAll(File zipFile, File targetDir) throws IOException {
Log.i(TAG, "[METHOD] void unzipAll(zipFile:" + zipFile + ", targetDir:" + targetDir + ")");
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
ZipEntry zentry = null;
// if exists remove
if (targetDir.exists()) {
FileUtils.deleteDirectory(targetDir);
targetDir.mkdirs();
}
else {
targetDir.mkdirs();
}
Log.d(TAG, "targetDir: " + targetDir);
// unzip all entries
while ((zentry = zis.getNextEntry()) != null) {
String fileNameToUnzip = zentry.getName();
File targetFile = new File(targetDir, fileNameToUnzip);
// if directory
if (zentry.isDirectory()) {
(new File(targetFile.getAbsolutePath())).mkdirs();
}
else {
// make parent dir
(new File(targetFile.getParent())).mkdirs();
unzipEntry(zis, targetFile);
Log.d(TAG, "Unzip file: " + targetFile);
}
}
zis.close();
}
private File unzipEntry(ZipInputStream zis, File targetFile) throws IOException {
FileOutputStream fos = new FileOutputStream(targetFile);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = zis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
return targetFile;
}
希望这个代码是帮助你.. 我使用此代码下载并解压缩文件
+1
它正在工作...... –
相关问题
- 1. 在C#中使用下载管理器下载文件
- 2. 使用下载管理器从AsyncTask下载文件
- 3. 下载.zip文件
- 4. Zip文件下载
- 5. 下载ZIP文件
- 6. Grails下载zip文件(浏览器下载文件)
- 7. 如何让用户使用vaadin文件下载器下载zip文件
- 8. 下载管理器Android:下载完成
- 9. 下载文件,下载管理器的Android
- 10. Android让下载管理器一次下载一个文件?
- 11. 安卓下载管理器下载文件一次
- 12. php下载文件在下载管理器
- 13. 通过Android下载管理器下载大文件
- 14. Android的下载管理器说无法打开文件下载
- 15. Android的下载管理器保存到下载文件夹
- 16. symfony2文件下载管理器
- 17. 使用perl从url下载zip文件
- 18. 使用python下载大zip文件
- 19. 使用Android下载ZIP文件
- 20. 如何使用angularjs下载zip文件
- 21. 使用微风下载zip文件
- 22. 使用php下载zip文件夹
- 23. 使用wget下载ZIP文件
- 24. 使用凌空下载Zip文件android
- 25. 使用下载管理器下载文件到公众下载目录与原文件名
- 26. urllib.urlretrieve下载空zip文件
- 27. .zip文件下载为.php
- 28. MVC3 zip文件和下载
- 29. ASP MVC下载Zip文件
- 30. 下载zip文件laravel 5.2
我试过这个。它显示下载通知。但它不存在于外部目录中。 – Anu
你是对的,我重读了文档,并且不允许将null传递给setDestinationExternalFilesDir。我会编辑答案,这可能会解决您的问题。 – pshegger
'Context.DOWNLOAD-SERVICE'>'Context.DOWNLOAD_SERVICE' –