2010-08-08 36 views
6

Tôi có một kho lưu trữ 7zip có chứa hàng trăm tệp được phân tách thành các thư mục khác nhau. Mục tiêu là tải xuống từ máy chủ FTP và sau đó giải nén nó trên điện thoại.Làm thế nào để giải nén một kho lưu trữ 7zip trong Android?

Vấn đề của tôi là SDK 7zip không chứa nhiều. Tôi đang tìm kiếm các ví dụ, hướng dẫn và đoạn trích về việc giải nén các tệp 7z.

(giải nén qua Intent chỉ là một lựa chọn thứ yếu)

+0

Danh sách các hướng dẫn 7-Zip nằm ở cuối số this page. – gregS

+0

Cảm ơn bạn đã trả lời, nhưng các liên kết trên trang 7zip khá cũ và không thể sử dụng được cho tôi. Tôi chia rẽ câu hỏi này thành câu hỏi khác: http://stackoverflow.com/questions/3469904/ – Wolkenjaeger

+0

Bạn có thể muốn xem qua AndroXplorer v.3. Nó hỗ trợ nhiều định dạng tập tin bao gồm 7z. – Yongki

Trả lời

2

Go here:

LZMA SDK chỉ cung cấp các bộ mã hóa và giải mã để mã hóa/giải mã dữ liệu thô, nhưng lưu trữ 7z là một định dạng phức tạp cho việc lưu trữ nhiều tệp.

-1

tôi đã tìm thấy điều này page cung cấp giải pháp thay thế hoạt động như một sự quyến rũ. Bạn chỉ cần thêm compile 'org.apache.commons:commons-compress:1.8'

vào tập lệnh bản dựng của bạn và sử dụng tính năng bạn muốn. Đối với vấn đề này tôi đã làm như sau:

AssetManager am = getAssets(); 
     InputStream inputStream = null; 
     try { 
      inputStream = am.open("a7ZipedFile.7z"); 
      File file1 = createFileFromInputStream(inputStream); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
SevenZFile sevenZFile = null; 
     try{ 
      File f = new File(this.getFilesDir(), "a7ZipedFile.7z"); 
      OutputStream outputStream = new FileOutputStream(f); 
      byte buffer[] = new byte[1024]; 
      int length = 0; 
      while((length=inputStream.read(buffer)) > 0) { 
       outputStream.write(buffer,0,length); 
      } 

      try { 
       sevenZFile = new SevenZFile(f); 
       SevenZArchiveEntry entry = sevenZFile.getNextEntry(); 
       while (entry != null) { 
        System.out.println(entry.getName()); 
        FileOutputStream out = openFileOutput(entry.getName(), Context.MODE_PRIVATE); 
        byte[] content = new byte[(int) entry.getSize()]; 
        sevenZFile.read(content, 0, content.length); 
        out.write(content); 
        out.close(); 
        entry = sevenZFile.getNextEntry(); 
       } 
       sevenZFile.close(); 
       outputStream.close(); 
       inputStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     }catch (IOException e) { 
      //Logging exception 
      e.printStackTrace(); 
     } 

Chỉ vẽ lại khoảng 200k cho thư viện đã nhập. Khác hơn là nó thực sự dễ sử dụng.

Các vấn đề liên quan