Cách nén và giải nén các tệp đã có trong DDMS: data/data/mypackage/files/
Tôi cần một ví dụ đơn giản cho điều đó. Tôi đã tìm kiếm liên quan đến zip và giải nén. Nhưng, không có ví dụ nào cho tôi. Bất cứ ai có thể nói một số ví dụ. Cảm ơn trước.Cách nén và giải nén tệp?
Trả lời
Hãy xem các lớp java.util.zip. * Cho chức năng zip. Tôi đã thực hiện một số mã zip/giải nén cơ bản mà tôi đã dán bên dưới. Hy vọng nó giúp.
public static void zip(String[] files, String zipFile) throws IOException {
BufferedInputStream origin = null;
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
try {
byte data[] = new byte[BUFFER_SIZE];
for (int i = 0; i < files.length; i++) {
FileInputStream fi = new FileInputStream(files[i]);
origin = new BufferedInputStream(fi, BUFFER_SIZE);
try {
ZipEntry entry = new ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1));
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER_SIZE)) != -1) {
out.write(data, 0, count);
}
}
finally {
origin.close();
}
}
}
finally {
out.close();
}
}
public static void unzip(String zipFile, String location) throws IOException {
try {
File f = new File(location);
if(!f.isDirectory()) {
f.mkdirs();
}
ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile));
try {
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
String path = location + ze.getName();
if (ze.isDirectory()) {
File unzipFile = new File(path);
if(!unzipFile.isDirectory()) {
unzipFile.mkdirs();
}
}
else {
FileOutputStream fout = new FileOutputStream(path, false);
try {
for (int c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
zin.closeEntry();
}
finally {
fout.close();
}
}
}
}
finally {
zin.close();
}
}
catch (Exception e) {
Log.e(TAG, "Unzip exception", e);
}
}
Không hiệu quả với tôi. Sticks trong vòng lặp vô hạn. – usman
Điều này là sai: 'Chuỗi đường dẫn = vị trí + ze.getName(); nếu (ze.isDirectory()) { Tệp unzipFile = new File (đường dẫn); nếu (! UnzipFile.isDirectory()) { unzipFile.mkdirs(); } } ' – maohieng
giá trị của biến kích thước bộ đệm là gì? –
Chức năng zip brianestey được cung cấp hoạt động tốt, nhưng chức năng giải nén rất chậm do đọc từng byte một lần. Đây là một phiên bản sửa đổi của hàm unzip của anh ta, sử dụng bộ đệm và nhanh hơn nhiều.
/**
* Unzip a zip file. Will overwrite existing files.
*
* @param zipFile Full path of the zip file you'd like to unzip.
* @param location Full path of the directory you'd like to unzip to (will be created if it doesn't exist).
* @throws IOException
*/
public static void unzip(String zipFile, String location) throws IOException {
int size;
byte[] buffer = new byte[BUFFER_SIZE];
try {
if (!location.endsWith(File.separator)) {
location += File.separator;
}
File f = new File(location);
if(!f.isDirectory()) {
f.mkdirs();
}
ZipInputStream zin = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile), BUFFER_SIZE));
try {
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
String path = location + ze.getName();
File unzipFile = new File(path);
if (ze.isDirectory()) {
if(!unzipFile.isDirectory()) {
unzipFile.mkdirs();
}
} else {
// check for and create parent directories if they don't exist
File parentDir = unzipFile.getParentFile();
if (null != parentDir) {
if (!parentDir.isDirectory()) {
parentDir.mkdirs();
}
}
// unzip the file
FileOutputStream out = new FileOutputStream(unzipFile, false);
BufferedOutputStream fout = new BufferedOutputStream(out, BUFFER_SIZE);
try {
while ((size = zin.read(buffer, 0, BUFFER_SIZE)) != -1) {
fout.write(buffer, 0, size);
}
zin.closeEntry();
}
finally {
fout.flush();
fout.close();
}
}
}
}
finally {
zin.close();
}
}
catch (Exception e) {
Log.e(TAG, "Unzip exception", e);
}
}
Giải nén này không hoạt động đối với tôi. Tôi đã nhận được lỗi vì nó đã cố gắng giải nén một tệp trước thư mục mẹ của nó. Trong câu lệnh khác tôi đã thêm một điều kiện để tạo thư mục cha nếu nó không tồn tại. Bây giờ nó hoạt động. –
@ J-L Cảm ơn bạn đã chỉ ra điều đó. Tôi đã chỉnh sửa mã cho phù hợp. – Ben
nhanh và công việc gr8, BUFFER_SIZE = 8192 –
- 1. nén và giải nén suối
- 2. JavaScript: Giải nén/thổi phồng/giải nén/giải nén chuỗi
- 3. Cách giải nén tệp gzip và ghi tệp đó ra tệp không nén, trên iPhone
- 4. GZipStream và giải nén
- 5. giải nén và tạo các tệp ipk
- 6. Nén và giải nén các thư mục và tệp bằng cách sử dụng Java
- 7. Làm cách nào để giải nén/giải nén trong Emacs
- 8. Cách giải nén tệp zip C#
- 9. Cách giải nén tệp .zip trên iOS?
- 10. Nén và giải nén thư mục trong C#
- 11. Nén tệp nén zip
- 12. Giải nén và lưu tệp bằng cách sử dụng as3?
- 13. Nén chuỗi Javascript và giải nén PHP/Ruby
- 14. nén và giải nén dữ liệu chuỗi trong java
- 15. Nén bằng Java Giải nén bằng PHP
- 16. cách giải nén với pigz
- 17. Python - cơ chế để xác định loại tệp nén và giải nén
- 18. Giải nén tệp .gz bằng C#
- 19. giải nén tệp .gz theo lô
- 20. Giải nén tệp trong Tài sản Android
- 21. Giải nén tệp Zip ở Django
- 22. giải nén tệp .gz bằng GZipStream
- 23. giải nén tệp tar.gz trong R?
- 24. Giải nén tệp zip bằng zlib
- 25. Giải nén tệp ZIP trên Amazon S3
- 26. giải nén và đọc tệp gzip trong scala
- 27. Nén/giải nén các thư mục & tập tin
- 28. Cách đọc nội dung của tệp được nén mà không cần giải nén trong java
- 29. Cách lấy một vài dòng từ tệp nén .gz mà không giải nén
- 30. cách giải nén resources.pak khỏi google chrome?
Hãy xem tại đây: http://www.jondev.net/articles/Zipping_Files_with_Android_(Programmatically), trên trang đầu tiên khi tìm kiếm "android cách zip tệp" trên Google. – nhaarman