2013-02-08 12 views
5

yılında açılan olmadan Sıkıştırılmış dosyanın içeriğini okuma. Bu örnekte, Zip dosyası, oldukça büyük olan aynı ada sahip bir dosya (yani. Ex.txt) içerir. Zip dosyasını her seferinde çıkarmak istemiyorum. Bu yüzden zip dosyasını çıkarmadan dosyanın içeriğini (ex.txt) okumam gerekiyor. Aşağıda olduğu gibi bazı kodları denedim Ama sadece dosyanın içindeki değişkenin adını okuyabiliyorum.nasıl <code>ex.zip</code> gibi isimlerle dosya var java

nasıl değişkende dosya ve saklar içeriğini okunur?

fis=new FileInputStream("C:/Documents and Settings/satheesh/Desktop/ex.zip"); 
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); 
ZipEntry entry; 

while((entry = zis.getNextEntry()) != null) { 
    i=i+1; 
    System.out.println(entry); 
    System.out.println(i); 
    //read from zis until available 
} 
+1

, sorunuz çok belirsizdir. Dosyaları ZIP'den çıkarmak istiyor musunuz, istemiyor musunuz? Ne * özel problem * çözmeye çalışıyorsun? – parsifal

+0

güle yolu: Navigasyon Sistemleri bunu aynı şekilde yapmak, onların dijital yol haritası verileri ana bellekte sıkıştırılmış tutmak ve talep üzerine parçalar – AlexWien

cevap

5

Fikrin bir bayt dizisi olarak zip dosyasını okumak ve bir değişkende saklamaktır Peşin teşekkür ederiz. Java 1.7 varsa

İlk bir bayt dizisindeki Zip dosyasının içeriğini okumak zipFileBytes

: Eğer zip gerektiğinde bellek tasarrufu talep üzerine çıkarmak Daha sonra

Path path = Paths.get("path/to/file"); 
byte[] zipFileBytes= Files.readAllBytes(path); 

aksi Şimdi

byte[] zipFileBytes; 
zipFileBytes = IOUtils.toByteArray(InputStream input); 

Sıkıştırılmış lib Appache.commons kullanmak dosya hala sıkıştırılmış biçimde bir zipFileBytes değişkeninde saklanır. yapabilirsiniz, dosya metin içeriyorsa, Örneğin

 ZipFile fis = new ZipFile("ex.zip"); 

     int i = 0; 
     for (Enumeration e = zip.entries(); e.hasMoreElements();) { 
      ZipEntry entry = (ZipEntry) e.nextElement(); 
      System.out.println(entry); 
      System.out.println(i); 

      InputStream in = fis.getInputStream(entry); 

     } 

ve bir dize olarak yazdırmak istiyorum: Bir şeyin kullanacağım

ByteArrayInputStream bis = new ByteArrayInputStream(zipFileBytes)); 
ZipInputStream zis = new ZipInputStream(bis); 
2

Sanırım bir zip dosyası, birçok dosyayı tutabilen bir kapsayıcıdır (ve böylece sizi gezinmeye zorlar. her bir açtığınızda dosya sağdaki dosyaya doğru), her zip dosyasının yalnızca bir metin dosyası içerdiğini belirttiğiniz gibi, işleri ciddi şekilde zorlaştırır. Belki de sadece metin dosyasını gziplemek çok daha kolay (gzip bir kap değil, sadece verilerin sıkıştırılmış bir versiyonudur). Ve kullanımı çok basit:

GZIPInputStream gis = new GZIPInputStream(new FileInputStream("file.txt.gz")); 
// and a BufferedReader on top to comfortably read the file 
BufferedReader in = new BufferedReader(new InputStreamReader(gis)); 

onları üreten aynı derecede basittir: yazılı olarak

GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream("file.txt.gz")); 
+0

Thats değil cevabı halletmek, bir değişkende sıkıştırılmış formda zip istiyor. Alıntı: Sonra zip dosyasını diskte her zaman ayıklamak istemiyoruz olmadan ** Bu, sadece (byte veya satır satır gösterildiği gibi bayt) içeriğini okumak için izin verir vermez @AlexWien verilerini – AlexWien

+0

okumak ** tüm dosyayı bir kerede genişleterek, OP'in peşinde olduğu anlayışıydı. Sadece bir zip dosyası ile çalışmak daha kolay olan dosyaları sıkıştırmak için bir alternatif işaret etmek istedim. Bir zip dosyasını değişken bir imoda olduğu gibi saklama pratik bir uygulamaya sahip değildir. – fvu

+0

Belirsiz, ne istediği, belki de çözümünüzün ne olduğunu, diskette yeni bir dosya oluşturmayı unzip istediğini söyledi. Bir zip dosyasını avariable olarak tutmak her zaman aptalca değildir: Bir dosyadan okumaktan ziyade bir bayt dizisinden unzip açmanın yolları: İkincisinin 100 katını unzip etmeniz gerektiğini düşünün, ebeddedilmiş bir aygıtta disk erişimiyle bunu yapamazsınız. Düşük önbellek. Bir çok uygulama var: bir aracın iki büyük ülkede sürdüğü parçayı hesaplayan harita eşleme sistemleri: Diskten okuma yavaştır – AlexWien

İlgili konular