96 votes

Lecture de GZIPInputStream ligne par ligne

J'ai un fichier au format .gz. La classe java pour lire ce fichier est GZIPInputStream. Cependant, cette classe n'étend pas la classe BufferedReader de java. Par conséquent, je ne suis pas en mesure de lire le fichier ligne par ligne. J'ai besoin de quelque chose comme ceci

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

J'ai pensé créer une classe qui étend la classe Reader ou BufferedReader de java et utiliser GZIPInputStream comme une de ses variables.

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);
    }

}

Mais, cela ne fonctionne pas quand j'utilise

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

Quelqu'un peut-il me conseiller sur la marche à suivre ?

0 votes

Regardez ce lien stackoverflow.com/q/6717165/779408 . Une méthode de compression et de décompression y est représentée.

1 votes

Pour l'amour de tout ce qui est bon et juste dans ce monde et pour la santé mentale de tous les développeurs qui écrivent du code un tant soit peu valable..... SOYEZ CONSCIENTS DE L'ENCODAGE COMME @erickson le signale ! C'est la seule réponse qui le signale, ce qui me donne envie de pleurer.

0voto

Aaron Points 3772

Qu'en est-il :

GZIPInputStream zipReader = new GZIPInputStream();
InputStreamReader streamReader = new InputStreamReader(zipReader);
BufferedReader bufferedReader = new BufferedReader(streamReader);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X