我正在使用Apache Commons Compress庫來迭代.tar.gz文件。我的問題是,如果我使用.getNextTarEntry()迭代tar文件,我可以始終假定tarArchiveEntry對象是以前的條目的後代,它們是目錄。我無法用簡單的英語解釋這個所以這裏是代碼示例:使用java迭代tar.gz文件
try (
FileInputStream fileInputStream = new FileInputStream(tarFile);
GZIPInputStream gzipInputStream = new GZIPInputStream(fileInputStream);
TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(gzipInputStream);) {
TarArchiveEntry tarArchiveEntry;
while (null != (tarArchiveEntry = tarArchiveInputStream.getNextTarEntry())) {
if (tarArchiveEntry.isDirectory()) {
currentDirEntry = tarArchiveEntry
} else {
//Is tarAchiveEntry always "child" of currentDirEntry
}
}
}
我的問題是我處理龐大的名爲.tar.gz文件(幾個GB大,含> 100K文件)和我不想爲每個單個文件解析父目錄名(它們包含重要信息)。我只想解析目錄名一次,並假設所有的下一個條目都是這個目錄的子目錄。如果我打到下一個目錄,那麼這個過程從一開始就開始。
我不能使用DIY的方法,因爲我不確定什麼會影響創建.tar.gz文件時的文件順序,但由於tar格式不包含任何索引(據我所知?),它會使感覺到目錄條目在它們的內容之前被列出。
任何幫助表示讚賞。