0

tar アーカイブから単一のファイルを抽出するアプリケーションを作成しました。アプリケーションは *.tar を適切に読み取りますが、ファイルを抽出しようとすると、アプリケーションは正しいファイル名で新しいファイルを作成するだけです... ファイルは空 (0kb) です。だから...おそらく、抽出する代わりに新しいファイルを作成するだけです...

この時点で全くの初心者です...

for(TarArchiveEntry tae : tarEntries){
    System.out.println(tarEntries.size());
    try {
        fOutput = new FileOutputStream(new File(tae.getFile(), tae.getName()));
        byte[] buf = new byte[(int) tae.getSize()];
        int len;

        while ((len = tarFile.read(buf)) > 0) {
            fOutput.write(buf, 0, len);
        }

        fOutput.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
4

1 に答える 1

1

を呼び出した直後にのみエントリのコンテンツを読み取ることができると仮定tarFileします。TarArchiveInputStreamtarFile.getNextTarEntry()

ストリームは順次処理されるため、呼び出すgetNextTarEntryと、現在のエントリのコンテンツをスキップして次のエントリに移動します。アーカイブを埋めるためにアーカイブ全体を読んだように見えtarEntriesます。この場合、最後のエントリを過ぎて既に読んでおり、ストリームが使い果たされています。

于 2015-10-30T19:44:53.063 に答える