在Java中,可以使用java.util.zip
包中的类进行文件的压缩和解压缩。以下是一个简单的示例,演示了如何使用这些类来压缩和解压缩文件:
压缩文件
import java.io.*; import java.util.zip.*; public class ZipFileExample { public static void main(String[] args) { String inputDir = "path/to/input/directory"; String zipFilePath = "path/to/output.zip"; try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath))) { File dir = new File(inputDir); zipDirectory(dir, zos); } catch (IOException e) { e.printStackTrace(); } } private static void zipDirectory(File dir, ZipOutputStream zos) throws IOException { if (!dir.isDirectory()) { throw new IllegalArgumentException("Input must be a directory"); } for (File file : dir.listFiles()) { if (file.isDirectory()) { zipDirectory(file, zos); } else { try (FileInputStream fis = new FileInputStream(file); ZipEntry ze = new ZipEntry(file.getName())) { zos.putNextEntry(ze); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } zos.closeEntry(); } } } } }
解压缩文件
import java.io.*; import java.util.zip.*; public class UnzipFileExample { public static void main(String[] args) { String zipFilePath = "path/to/input.zip"; String outputDir = "path/to/output/directory"; try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath))) { ZipEntry ze = zis.getNextEntry(); while (ze != null) { String fileName = ze.getName(); File newFile = new File(outputDir + File.separator + fileName); if (!ze.isDirectory()) { try (FileOutputStream fos = new FileOutputStream(newFile); BufferedOutputStream bos = new BufferedOutputStream(fos)) { byte[] buffer = new byte[1024]; int length; while ((length = zis.read(buffer)) > 0) { bos.write(buffer, 0, length); } } } else { new File(outputDir + File.separator + fileName).mkdirs(); } ze = zis.getNextEntry(); } } catch (IOException e) { e.printStackTrace(); } } }
请注意,这些示例仅用于演示目的,并且假设输入和输出路径是正确的。在实际应用中,您可能需要添加额外的错误处理和验证。