1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 完美java.util.zip使用 实现zip压缩和解压

完美java.util.zip使用 实现zip压缩和解压

时间:2020-06-17 16:25:43

相关推荐

完美java.util.zip使用 实现zip压缩和解压

之前找了很多demo代码在压缩中遇到各种问题,中文乱码、文本内容丢失等。

以下教程是本人亲自测试过,通过java.util.zip包实现java代码的文件zip压缩和解压:

1、压缩:

1)压缩一个文件

public static void main(String[] args) throws IOException {String sourceFile = "test1.txt";FileOutputStream fos = new FileOutputStream("compressed.zip");ZipOutputStream zipOut = new ZipOutputStream(fos);File fileToZip = new File(sourceFile);FileInputStream fis = new FileInputStream(fileToZip);ZipEntry zipEntry = new ZipEntry(fileToZip.getName());zipOut.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while((length = fis.read(bytes)) >= 0) {zipOut.write(bytes, 0, length);}zipOut.close();fis.close();fos.close();}

2)压缩多个文件

public static void main(String[] args) throws IOException {List<String> srcFiles = Arrays.asList("test1.txt", "test2.txt");FileOutputStream fos = new FileOutputStream("multiCompressed.zip");ZipOutputStream zipOut = new ZipOutputStream(fos);for (String srcFile : srcFiles) {File fileToZip = new File(srcFile);FileInputStream fis = new FileInputStream(fileToZip);ZipEntry zipEntry = new ZipEntry(fileToZip.getName());zipOut.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while((length = fis.read(bytes)) >= 0) {zipOut.write(bytes, 0, length);}fis.close();}zipOut.close();fos.close();}

3)压缩文件夹

public static void main(String[] args) throws IOException {String sourceFile = "zipTest";FileOutputStream fos = new FileOutputStream("dirCompressed.zip");ZipOutputStream zipOut = new ZipOutputStream(fos);File fileToZip = new File(sourceFile);zipFile(fileToZip, fileToZip.getName(), zipOut);zipOut.close();fos.close();}private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {if (fileToZip.isHidden()) {return;}if (fileToZip.isDirectory()) {if (fileName.endsWith("/")) {zipOut.putNextEntry(new ZipEntry(fileName));zipOut.closeEntry();} else {zipOut.putNextEntry(new ZipEntry(fileName + "/"));zipOut.closeEntry();}File[] children = fileToZip.listFiles();for (File childFile : children) {zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);}return;}FileInputStream fis = new FileInputStream(fileToZip);ZipEntry zipEntry = new ZipEntry(fileName);zipOut.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zipOut.write(bytes, 0, length);}fis.close();}

2、解压:

public static void main(String[] args) throws IOException {String fileZip = "src/main/resources/unzipTest/compressed.zip";File destDir = new File("src/main/resources/unzipTest");byte[] buffer = new byte[1024];ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip));ZipEntry zipEntry = zis.getNextEntry();while (zipEntry != null) {File newFile = newFile(destDir, zipEntry);FileOutputStream fos = new FileOutputStream(newFile);int len;while ((len = zis.read(buffer)) > 0) {fos.write(buffer, 0, len);}fos.close();zipEntry = zis.getNextEntry();}zis.closeEntry();zis.close();}public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {File destFile = new File(destinationDir, zipEntry.getName());String destDirPath = destinationDir.getCanonicalPath();String destFilePath = destFile.getCanonicalPath();if (!destFilePath.startsWith(destDirPath + File.separator)) {throw new IOException("Entry is outside of the target dir: " + zipEntry.getName());}return destFile;}

个人学习记录,上述方法摘自:

/java-compress-and-uncompress

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。