java 实现文件压缩和解压缩
实现了文件的简单压缩、解压缩。主要测试用的里面有一些可能写的比较仓促,如有不适之处还望不吝赐教。
1.解决了中文的问题,应用的不是jdk中的包,而是应用的ant.jar
?代码:
??
import java.io.DataOutputStream;import java.io.File;import java.io.FileFilter;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public class Test {/** * @param args */public static void main(String[] args) {Test test = new Test(); //test.unzipFiles("D:/xmlZipFils/test.zip");test.zipFiles();}/** * 压缩文件 */public void zipFiles(){File fromFiles = new File("d:\\table2xml"); if(!fromFiles.exists()){ fromFiles.mkdirs(); } try {//输出流 OutputStream os = new FileOutputStream("D:\\xmlZipFils\\test.zip"); ZipOutputStream zipos = new ZipOutputStream(os); File file = null; ZipEntry zipEntry = null; InputStream inputStream = null; File[] files = fromFiles.listFiles(new FileFilter(){public boolean accept(File pathname) {// TODO Auto-generated method stubboolean flag = false;if(pathname.getName().indexOf("桥接测试@weibainju_1181")!=-1){flag = true;}return flag;} }); doFiles(files,zipos,true); zipos.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 压缩时对文件和目录进行处理 * @param 某目录下面的所有文件和目录 * @param zip数出流 * @param 是否是要压缩的顶级目录 */public static void doFiles(File[] files,ZipOutputStream zipos,boolean isFrist){InputStream inputStream =null;ZipEntry zipEntry = null;try {for(int i =0;i<files.length;i++){ if(!files[i].isDirectory()){ inputStream = new FileInputStream(files[i]); if(isFrist==false){ zipEntry = new ZipEntry(files[i].getParentFile().getName()+File.separatorChar+files[i].getName()); }else{ zipEntry = new ZipEntry(files[i].getName()); } zipos.putNextEntry(zipEntry); int count =0; while((count=inputStream.read())!=-1){ zipos.write(count); } inputStream.close(); }else{ File[] files1 = files[i].listFiles(); doFiles(files1,zipos,false); } } } catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 解压缩文件 */ public void unzipFiles(String zipFilePath){ String outDir = "d:/unzipXml"; try {File unzipDir = new File(outDir); ZipFile unzipFile = new ZipFile(zipFilePath); Enumeration e = unzipFile.getEntries(); InputStream zipis = null; ZipEntry zipEntry; while(e.hasMoreElements()){ zipEntry = (ZipEntry) e.nextElement(); zipis = unzipFile.getInputStream(zipEntry); if(zipEntry.isDirectory()){ File file = new File(outDir,zipEntry.getName()); if(!file.exists()){ file.mkdirs(); } }else{ if(zipEntry.getName().indexOf("/")>0){File file = new File(outDir+File.separatorChar+zipEntry.getName().substring(0,zipEntry.getName().indexOf("/")));if(!file.exists()){file.mkdirs();} } File file = new File(outDir,zipEntry.getName()); OutputStream os = new FileOutputStream(file); DataOutputStream dos = new DataOutputStream(os); int count = 0; while((count = zipis.read())!=-1){ dos.write(count); } zipis.close(); os.close(); dos.close(); } } } catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}
?
?
本人原创。欢迎转载!