码迷,mamicode.com
首页 > 其他好文 > 详细

校验和为Adler的压缩

时间:2018-07-21 22:43:28      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:upd   public   pen   ace   tostring   pil   res   文件的   匹配   

@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的压缩

标签:upd   public   pen   ace   tostring   pil   res   文件的   匹配   

原文地址:https://www.cnblogs.com/jiminluo/p/9347996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!