Java如何为zip文件创建校验和?
此示例演示如何CheckedOutputStream用于创建zip文件的校验和。校验和可用于检测在向远程计算机的传输过程中数据是否已损坏。
package org.nhooo.example.zip; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import java.util.zip.CheckedOutputStream; import java.util.zip.Adler32; public class ZipWithChecksum { public static void main(String[] args) throws Exception { String target = "data-1.zip"; try (FileOutputStream fos = new FileOutputStream(target); //输出流还维护数据的校验和 //被写。然后可以使用校验和来验证 //输出数据的完整性。 CheckedOutputStream checksum = new CheckedOutputStream(fos, new Adler32()); ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(checksum))) { int size; byte[] buffer = new byte[1024]; //获取工作文件夹中的所有文本文件。 File dir = new File("."); String[] files = dir.list(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".txt"); } }); for (String file : files) { System.out.println("Compressing: " + file); try (FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis, buffer.length)) { //在ZipOutputStream中放置一个新的ZipEntry ZipEntry zipEntry = new ZipEntry(file); zos.putNextEntry(zipEntry); //将数据读取到源文件的末尾并写入 //到zip输出流。 while ((size = bis.read(buffer, 0, buffer.length)) > 0) { zos.write(buffer, 0, size); } zos.closeEntry(); } } //打印校验和值 long value = checksum.getChecksum().getValue(); System.out.println("Checksum : " + value); } } }