2012-04-10 16 views
0

ZipInputStreamを使用してコードを書きましたが、何か問題があります。ZipInputStreamはzipファイルのすべての情報を読み取ることができません

ZipInputStream zin=null; 
zin=new ZipInputStream(new BufferedInputStream(
    new FileInputStream("e:/testzip.zip"))); 
ZipEntry ze; 
while((ze=zin.getNextEntry())!=null) { 

    System.out.println("readfile"+ze.getName()); 

    int c=0; 

    while((c=zin.read())>0) { 
     System.out.write(c); 
    } 
} 
zin.close(); 

testzip.zipには3つのテキストファイルがあります。つまり、正しい出力は3つのファイル名とその内容でなければなりません。しかし、私の出力は3つのファイル名と2つの内容です。なぜ3つではなく、2つのコンテンツだけ?

+0

ありがとう@ Andrew Thompson –

+0

英語のネイティブスピーカーではないかもしれませんが、 '読み込み'と '書き込み'の違いを理解することが重要です。 (入力ストリームに書き込むことはできません。読み込みのみ可能です)2)入力欄に注意を払い、メッセージの投稿/編集フォームの上部にあるコード書式設定ボタンを使用して、余分な空白行をコード転記。 - そして、ようこそ! –

+0

私が提供できる編集とヒントをお待ちしております。 :) –

答えて

2

私は3つのテキストファイルでジップを作成しました。それらがテキストファイルであるという事実は、以下のコードが機能する上で重要です。それはあなたのzipファイルのTOCを与えることができるので、より適切であるかもしれないZipFileのように思える、このユースケースについては

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Enumeration; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 

public class Main { 

    public static void main(String[] args) throws Exception { 
     ZipFile zipFile = new ZipFile("D:\\zip.zip"); 
     Enumeration<? extends ZipEntry> entries = zipFile.entries(); 
     while(entries.hasMoreElements()) { 
      ZipEntry zipEntry = entries.nextElement(); 
      System.out.println(zipEntry.getName()); 
      BufferedReader bufferedeReader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry))); 
      String line = bufferedeReader.readLine(); 
      while(line != null) { 
       System.out.println(line); 
       line = bufferedeReader.readLine(); 
      } 
      bufferedeReader.close(); 
     } 
     zipFile.close(); 
    } 

} 
+0

私はそれを試してみましたが、同じoutput.thank –

+0

3番目のファイルが空ではないと確信していますか? – Tom

+0

ええ。私は5回以上zipファイルをチェックします –

0

:私はそれの名前と内容をすべてのエントリを読んで書き出します。

+0

ごめんなさい。TOCはどういう意味ですか? –

+0

目次 – Tom

関連する問題