java的解压各种格式⽂件_java实现单个或多个⽂件的压缩、解
压缩⽀持zip、rar等格式...
packagecom.util;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputS 压缩⽂件⼯具类重回汉唐歌词
*@authorsun.kai
* 2016年8⽉14⽇*/
public classZipUtil {static final int BUFFER = 8192;private staticFile zipFile;/*** 压缩单个或多⽂件⽅法
*@paramzipPath 压缩后的⽂件路径
两个人的地球*@paramsrcPathName 要压缩的⽂件路径
* 参数srcPathName也可以定义成数组形式,需调⽤⽅把参数封装到数组中传过来即可*/
public static voidcompress(String srcPathName) {//压缩后的⽂件对象
张静蕾zipFile = newFile(zipPath);try{//创建写出流操作
FileOutputStream fileOutputStream = newFileOutputStream(zipFile);
CheckedOutputStream cos= new CheckedOutputStream(fileOutputStream,newCRC32());
ZipOutputStream out= newZipOutputStream(cos);for(String srcPath:srcPathName){//创建需要压缩的⽂件对象
File file = newFile(srcPath);if (!ists()){throw new RuntimeException(srcPath + "不存在!");
}/** (1)如果在zip压缩⽂件中不需要⼀级⽂件⽬录,定义String basedir = "";
* 下⾯的compress⽅法中当判断⽂件file是⽬录后不需要加上basedir = basedir + Name() + File.separator;
* (2)如果只是想在压缩后的zip⽂件⾥包含⼀级⽂件⽬录,不包含⼆级以下⽬录,
* 直接在这定义String basedir = Name() + File.separator;
* 下⾯的compress⽅法中当判断⽂件file是⽬录后不需要加上basedir = basedir + Name() + File.
separator;
* (3)如果想压缩后的zip⽂件⾥包含⼀级⽂件⽬录,也包含⼆级以下⽬录,即zip⽂件⾥的⽬录结构和原⽂件⼀样
* 在此定义String basedir = "";
* 下⾯的compress⽅法中当判断⽂件file是⽬录后需要加上basedir = basedir + Name() + File.separator;*/
//String basedir = Name() + File.separator;
String basedir = "";
compress(file, out, basedir);
}
out.close();
特务j}catch(Exception e) {throw newRuntimeException(e);
}
}private static voidcompress(File file, ZipOutputStream out, String basedir) {/** 判断是⽬录还是⽂件*/
if(file.isDirectory()) {
basedir+= Name() +File.separator;
compressDirectory(file, out, basedir);
}else{
System.out.println("压缩:" + basedir +Name());
compressFile(file, out, basedir);
}
好想对你说
}/*** 压缩⼀个⽬录*/
private static voidcompressDirectory(File dir, ZipOutputStream out, String basedir) {if (!ists()){return; }
File[] files=dir.listFiles();for (int i = 0; i < files.length; i++) {/*递归*/compress(files[i], out, basedir);
}
}/*** 压缩⼀个⽂件*/
private static voidcompressFile(File file, ZipOutputStream out, String basedir) {if (!ists()) {return;
}try{
BufferedInputStream bis= newBufferedInputStream(newFileInputStream(file));//创建Zip实体,并添加进压缩包ZipEntry entry = new ZipEntry(basedir +Name());
out.putNextEntry(entry);//读取待压缩的⽂件并写进压缩包⾥
intcount;byte data[] = new byte[BUFFER];while ((count = ad(data, 0, BUFFER)) != -1) {
out.write(data,0, count);
}
bis.close();
鲤鱼吸水 男人什么感觉}catch(Exception e) {throw newRuntimeException(e);
}
}/*** 解压缩
*@paramsourceFile 要解压缩的⽂件的路径
*@paramdestDir 解压缩后的⽬录路径
*@throwsException*/
public static void deCompress(String sourceFile,String destDir) throwsException{//创建需要解压缩的⽂件对象File file = newFile(sourceFile);if (!ists()){throw new RuntimeException(sourceFile + "不存在!");
}//创建解压缩的⽂件⽬录对象
File destDiretory = newFile(destDir);if(!ists()){
destDiretory.mkdirs();
}/** 保证⽂件夹路径最后是"/"或者"\"
* charAt()返回指定索引位置的char值*/
char lastChar = destDir.charAt(destDir.length()-1);if(lastChar!='/'&&lastChar!='\\'){//在最后加上分隔符destDir +=File.separator;
}
unzip(sourceFile, destDir);
}/*** 解压⽅法
* 需要ant.jar*/
private static void unzip(String sourceZip,String destDir) throwsException{try{
Project p= newProject();
Expand e= newExpand();
e.setProject(p);
e.setSrc(newFile(sourceZip));
e.setOverwrite(false);
e.setDest(newFile(destDir));
}catch(Exception e){throwe;
}
}
}