10

わかりましたので、tar.gz ファイル (または xy) の内容を読みたいのですが、それは同じことです。私がやっていることは多かれ少なかれこれです:

TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream("c://temp//test.tar.gz")));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
while (currentEntry != null) {
    File f = currentEntry.getFile();
    br = new BufferedReader(new FileReader(f));
    System.out.println("For File = " + currentEntry.getName());
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println("line="+line);
    }
}
if (br!=null) {
    br.close();
}

しかし、のgetFileメソッドを呼び出すと null になりますTarArchiveEntry
Apache commons compress 1.8.1 を使用しています

4

1 に答える 1

24

TarArchiveEntry の getFile は使用できません。そのゲッターは、tar ファイル内のファイルを圧縮するときの反対の操作のためにのみ存在します。

代わりに、TarArchiveInputStream から直接読み取る必要があります。その場で解凍して「ファイル」の内容を返します。

例(テストされていないコード、YMMV):

TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream("c://temp//test.tar.gz")));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
while (currentEntry != null) {
    br = new BufferedReader(new InputStreamReader(tarInput)); // Read directly from tarInput
    System.out.println("For File = " + currentEntry.getName());
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println("line="+line);
    }
    currentEntry = tarInput.getNextTarEntry(); // You forgot to iterate to the next file
}
于 2014-09-09T16:33:13.077 に答える