Как распечатать содержимое файла tar.gz с Java? - PullRequest
2 голосов
/ 23 февраля 2011

Мне нужно реализовать приложение, которое позволяет печатать содержимое всех файлов в файле tar.gz.

Например:
если у меня есть три таких файла в папке с именем testx:
A.txt содержит слова «Боже, храни королеву»
B.txt содержит слова «Ubi maior, minor cessat»
C.txt.gz - файл, сжатый с помощью gzip и содержащий файл c.txt со словами «Hello America !!»

Итак, я сжимаю testx, получаю сжатый tar-файл: testx.tar.gz.

Итак, с моим Java-приложением я хотел бы напечатать вконсоль:
"Боже, храни королеву"
"Ubi maior, minor cessat"
"Hello America !!"

Я реализовал версию ZIP, и она работает хорошо, но сохраняябиблиотека tar из apache ant http://commons.apache.org/compress/, Я заметил, что это нелегко, как утилиты ZIP java.

Может ли кто-нибудь мне помочь?

Я начал искать в сети, чтобы понять, какдля достижения моей цели, поэтому у меня есть следующий код:

GZIPInputStream gzipInputStream=null;
gzipInputStream = new GZIPInputStream( new FileInputStream(fileName));
TarInputStream is =  new TarInputStream(gzipInputStream);
TarEntry entryx = null;

while((entryx = is.getNextEntry()) != null) {
    if (entryx.isDirectory()) continue;
    else {
        System.out.println(entryx.getName());
        if ( entryx.getName().endsWith("txt.gz")){
            is.copyEntryContents(out);
            // out is a OutputStream!! 
        }
    }
}

Так встрока is.copyEntryContents(out), можно сохранить в файл поток, передающий OutputStream, но я этого не хочу!В zip-версии после сохранения первой записи, ZipEntry, мы можем извлечь поток из сжатой корневой папки testx.tar.gz, а затем создать новый ZipInputStream и поиграть с ним для получения содержимого.

Возможно ли это сделать с помощью файла tar.gz?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

в Интернете, я натолкнулся на интересную идею: http://hype -free.blogspot.com / 2009/10 / using-tarinputstream-from-java.html .

После преобразования нашего TarEntry в Stream мы можем принять ту же идею, что и в Zip-файлах, например:

InputStream tmpIn = new StreamingTarEntry(is,  entryx.getSize());
// use BufferedReader to get one line at a time
BufferedReader gzipReader = new BufferedReader(
                       new InputStreamReader(
                        new GZIPInputStream(
                        inputZip )));

while (gzipReader.ready()) { System.out.println(gzipReader.readLine()); }
gzipReader.close();

ТАК, что с помощью этого кода вы можете распечатать содержимое файла testx.tar.gz ^ _ ^

0 голосов
/ 23 февраля 2011

Чтобы не записывать File, следует использовать ByteArrayOutputStream и использовать public String toString (String charsetName) с правильной кодировкой.

...