2012-01-12 67 views
5

Tôi muốn liệt kê tất cả các mục nhập của tệp tar trong chương trình Java của tôi. Làm thế nào là nó có thể ? Đối với các tệp zip, tôi có thể sử dụng mã bên dưới:Làm thế nào để liệt kê tất cả các mục của tệp tar trong java?

ZipFile zf = new ZipFile("ReadZip.zip"); 
Enumeration entries = zf.entries(); 
while (entries.hasMoreElements()) {.....} 

Nhưng tôi không chắc chắn về các tệp tar. Ai có thể giúp được không? Tôi đang sử dụng org.apache.tools.tar.*

Trả lời

-3

Để đọc tệp .jar Java, bạn có thể sử dụng công cụ "jar" ... hoặc Giải nén. Các tệp .Jar có định dạng .Zip.

Để đọc tệp * nix .tar, tuy nhiên, bạn cần sử dụng công cụ "tar".

Nếu bạn đang dùng Windows, tôi khuyến khích bạn thử 7-Zip. Đó là một công cụ hữu ích mà công nhận một định dạng zillion ... bao gồm cả .zip (do đó cũng .jar) và tar:

http://www.7-zip.org/

Nếu bạn phải làm điều đó theo chương trình, tôi đoán Apache Ant API "tar" là một cách tốt để đi. Nó cung cấp cho bạn một danh sách "TarEntry":

http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/api/org/apache/tools/tar/TarEntry.html

+0

bài gốc nêu rõ "trong java" –

2

API này rất giống với việc sử dụng Java riêng ZipInputStream.

Để bắt đầu:

TarInputStream tis = new TarInputStream(new FileInputStream("myfile.tar")); 
try 
{ 
    TarEntry entry; 
    do 
    { 
     entry = tis.getNextEntry(); 

     //Do something with the entry 
    } 
    while (entry != null); 
} 
finally 
{ 
    tis.close(); 
} 

More examples with different APIs are [here][2]. 
12

Apache Commons Compress (http://commons.apache.org/compress/) rất dễ dàng để sử dụng.

Dưới đây là một ví dụ về đọc mục của tar:

import java.io.FileInputStream; 

import org.apache.commons.compress.archivers.tar.TarArchiveEntry; 
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; 

public class Taread { 
    public static void main(String[] args) { 
     try { 
      TarArchiveInputStream tarInput = new TarArchiveInputStream(new FileInputStream(args[0])); 
      TarArchiveEntry entry; 
      while (null!=(entry=tarInput.getNextTarEntry())) { 
       System.out.println(entry.getName()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
Các vấn đề liên quan