87

.gz 形式のファイルがあります。このファイルを読み取るための Java クラスは GZIPInputStream です。ただし、このクラスは java の BufferedReader クラスを拡張していません。その結果、ファイルを 1 行ずつ読み取ることができません。私はこのようなものが必要です

reader  = new MyGZInputStream( some constructor of GZInputStream) 
reader.readLine()...

私は、JavaのReaderまたはBufferedReaderクラスを拡張し、GZIPInputStreamをその変数の1つとして使用するクラスを作成することを考えています。

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;
import java.util.zip.GZIPInputStream;

public class MyGZFilReader extends Reader {

    private GZIPInputStream gzipInputStream = null;
    char[] buf = new char[1024];

    @Override
    public void close() throws IOException {
        gzipInputStream.close();
    }

    public MyGZFilReader(String filename)
               throws FileNotFoundException, IOException {
        gzipInputStream = new GZIPInputStream(new FileInputStream(filename));
    }

    @Override
    public int read(char[] cbuf, int off, int len) throws IOException {
        // TODO Auto-generated method stub
        return gzipInputStream.read((byte[])buf, off, len);
    }

}

しかし、これは私が使用すると機能しません

BufferedReader in = new BufferedReader(
    new MyGZFilReader("F:/gawiki-20090614-stub-meta-history.xml.gz"));
System.out.println(in.readLine());

誰かがどのように進めるかアドバイスできますか..

4

5 に答える 5

3
BufferedReader in = new BufferedReader(new InputStreamReader(
        new GZIPInputStream(new FileInputStream("F:/gawiki-20090614-stub-meta-history.xml.gz"))));

String content;

while ((content = in.readLine()) != null)

   System.out.println(content);
于 2012-08-22T13:06:16.040 に答える