1. 程式人生 > >校驗和為Adler的壓縮

校驗和為Adler的壓縮

update ipo [] 關閉 條目 zip crc res user

@Test
public void testMulZip(){
try(
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("e:/java.zip"));//創建目錄等待zos讀取文件到壓縮目錄中
){
String str = "C:\\Users\\Jimin\\Desktop\\three\\three";//目錄
File file = new File(str);//創建目錄
File[] listFiles = file.listFiles(f->f.isFile());//過濾目錄中的文件,即提取文件到listFiles中
// Stream.of(listFiles).forEach(System.out::println);

String strRe = ".*(Users\\\\.*)";//String strRe = ".*(Users/.*)"; 正則表達式
Pattern pattern = Pattern.compile(strRe);//正則表達式的編譯

int i=0;
String entryName[] = new String[listFiles.length];//創建數組,用於接收文件名

for(File temp:listFiles){

String sStr = temp.toString();//文件名轉為字符串
// String replace = sStr.replace(‘\\‘, ‘/‘);//轉義\轉為非轉義的/
Matcher matcher = pattern.matcher(sStr);//文件名與正則匹配
if(matcher.find()){//匹配是否找到
String group1 = matcher.group(1);//找到取組一,即截斷部分字符
System.out.println(group1);
entryName[i] = group1;//把截取到的字符放到數組中
}
i++;//數組下標加一

}

Adler32 adler = new Adler32();//Adler加密對象的創建


for(i = 0;i<entryName.length;i++){//判斷數組的長度
ZipEntry entry = new ZipEntry(entryName[i]);//用數組的字符串創建壓縮文件的文件名
zos.putNextEntry(entry);//把文件名放到一開始創建的壓縮文件中
byte arr[] = Files.readAllBytes(listFiles[i].toPath());//文件名轉為路徑名,讀取所有文件到數組arr中

adler.update(arr);//用特定的字節數組arr更新校驗和
long value = adler.getValue();//得到檢查碼的值
entry.setCrc(value);//設置entry條目的CRC-32校驗和
//寫入內容
zos.write(arr);
zos.closeEntry();//關閉
adler.reset();//重置校驗和為初始值
}

}catch(Exception e){
e.printStackTrace();
}
}

校驗和為Adler的壓縮