在Java中,可以使用java.util.zip包來解壓ZIP文件。但是,這個包本身并不支持處理不同編碼的文件。如果你需要處理不同編碼的ZIP文件,你需要使用第三方庫,例如Apache Commons Compress。
以下是使用Apache Commons Compress庫解壓ZIP文件并處理不同編碼的示例:
pom.xml文件中添加以下依賴:<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class UnzipWithEncoding {
public static void main(String[] args) throws IOException {
String zipFilePath = "path/to/your/zipfile.zip";
String outputDirPath = "path/to/your/output/directory";
Charset encoding = Charset.forName("UTF-8"); // 設置解壓文件的編碼
try (InputStream fis = new FileInputStream(zipFilePath);
ZipArchiveInputStream zis = new ZipArchiveInputStream(fis)) {
ArchiveEntry entry;
while ((entry = zis.getNextEntry()) != null) {
Path outputPath = Paths.get(outputDirPath, entry.getName());
if (!entry.isDirectory()) {
// 解壓文件內容
try (InputStream contentStream = new InputStreamReader(zis, encoding)) {
Files.copy(contentStream, outputPath);
}
} else {
// 創建目錄
Files.createDirectories(outputPath.getParent());
}
zis.closeEntry();
}
}
}
}
在這個示例中,我們使用Charset.forName("UTF-8")設置了解壓文件的編碼。你可以根據需要更改為其他編碼。注意,這個示例僅處理ZIP文件,如果你需要處理其他類型的壓縮文件(如GZIP),可以使用相應的類(如GzipCompressorInputStream)。