java unzip解壓大文件技巧

小樊
127
2024-07-20 19:04:08

在Java中解壓大文件時(shí),可以使用Apache Commons Compress庫(kù)來(lái)處理壓縮文件。下面是一個(gè)示例代碼,演示如何使用Apache Commons Compress庫(kù)來(lái)解壓大文件:

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.compressors.CompressorStreamFactory;

import java.io.*;

public class UnzipLargeFile {

    public static void unzip(String inputFilePath, String outputDirectoryPath) {
        try (InputStream is = new FileInputStream(inputFilePath);
             BufferedInputStream bis = new BufferedInputStream(is);
             ArchiveInputStream ais = new ArchiveStreamFactory()
                     .createArchiveInputStream(bis)) {

            ArchiveEntry entry;

            while ((entry = ais.getNextEntry()) != null) {

                if (!ais.canReadEntryData(entry)) {
                    continue;
                }

                File outputFile = new File(outputDirectoryPath, entry.getName());

                if (entry.isDirectory()) {
                    if (!outputFile.exists() && !outputFile.mkdirs()) {
                        throw new IOException("Failed to create directory: " + outputFile);
                    }
                } else {
                    try (OutputStream os = new FileOutputStream(outputFile);
                         BufferedOutputStream bos = new BufferedOutputStream(os)) {

                        byte[] buffer = new byte[4096];
                        int len;

                        while ((len = ais.read(buffer)) != -1) {
                            bos.write(buffer, 0, len);
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ArchiveStreamFactory.NoFactoryFoundException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String inputFilePath = "path/to/large/compressed/file.zip";
        String outputDirectoryPath = "output/directory";

        unzip(inputFilePath, outputDirectoryPath);
    }
}

在上面的示例中,我們使用Apache Commons Compress庫(kù)來(lái)解壓大文件。我們首先創(chuàng)建一個(gè)ArchiveInputStream,然后逐個(gè)處理壓縮文件中的每個(gè)條目,并將其解壓到指定的輸出目錄中。

請(qǐng)確保在項(xiàng)目中包含Apache Commons Compress庫(kù)的依賴,例如Maven中的以下依賴:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

通過(guò)使用Apache Commons Compress庫(kù),我們可以高效地處理大文件的解壓縮操作,并避免內(nèi)存不足或性能問(wèn)題。

0