Java压缩和解压缩
来源:互联网 发布:档案归类软件 编辑:程序博客网 时间:2024/04/29 00:41
public class ZipUtil {private static List list = new ArrayList();public static void main(String argv[]) {try {byte b[] = new byte[512];// 压缩文件的保存路径String zipFile = "D:/ziptest/test.zip";// 压缩文件目录String filepath = "D:/ziptest/";List fileList = allFile(filepath);FileOutputStream fileOutputStream = new FileOutputStream(zipFile);// 使用输出流检查CheckedOutputStream cs = new CheckedOutputStream(fileOutputStream,new CRC32());// 声明输出zip流ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cs));for (int i = 0; i < fileList.size(); i++) {InputStream in = new FileInputStream((String) fileList.get(i));String fileName = ((String) (fileList.get(i))).replace(File.separatorChar, '/');System.out.println("ziping " + fileName);fileName = fileName.substring(fileName.indexOf("/") + 1);ZipEntry e = new ZipEntry(fileName);out.putNextEntry(e);int len = 0;while ((len = in.read(b)) != -1) {out.write(b, 0, len);}out.closeEntry();}out.close();System.out.println("done!");} catch (Exception e) {e.printStackTrace();}}private static List allFile(String path) {File file = new File(path);String[] array = null;String sTemp = "";if (file.isDirectory()) {} else {return null;}array = file.list();if (array.length > 0) {for (int i = 0; i < array.length; i++) {sTemp = path + array[i];file = new File(sTemp);if (file.isDirectory()) {allFile(sTemp + "/");} else {list.add(sTemp);}}} else {return null;}return list;}}
public class Zip { private static final int BUFFER = 1024;// Length of buffer private long length = 0;// A uncompress directory's length /** * Compress files to *.zip. * @param fileName: file to be compress */ public void compress(String fileName) { String targetFile = null; File sourceFile = new File(fileName); Vector<File> vector = getAllFiles(sourceFile); try { if (sourceFile.isDirectory()) { targetFile = fileName + ".zip"; } else { char ch = '.'; targetFile = fileName.substring(0, fileName.lastIndexOf((int)ch)) + ".zip"; } BufferedInputStream bis = null; BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetFile)); ZipOutputStream zipos = new ZipOutputStream(bos); byte data[] = new byte[BUFFER]; for (int i=0; i<vector.size(); i++) { File file = (File)vector.get(i); zipos.putNextEntry(new ZipEntry(getEntryName(fileName, file))); bis = new BufferedInputStream(new FileInputStream(file)); int count; while ((count=bis.read(data, 0, BUFFER)) != -1 ) { zipos.write(data, 0, count); } bis.close(); zipos.closeEntry(); } zipos.close(); bos.close(); showDetail(sourceFile, new File(targetFile)); } catch (IOException e) { e.printStackTrace(); } } /** * Uncompress *.zip files. * @param fileName: file to be uncompress */ public void uncompress(String fileName) { File sourceFile = new File(fileName); String filePath = sourceFile.getParent() + "/"; try { BufferedInputStream bis = null; BufferedOutputStream bos = null; ZipFile zipFile = new ZipFile(fileName); Enumeration en = zipFile.entries(); byte data[] = new byte[BUFFER]; while (en.hasMoreElements()) { ZipEntry entry = (ZipEntry)en.nextElement(); if (entry.isDirectory()) { new File(filePath + entry.getName()).mkdirs(); continue; } bis = new BufferedInputStream(zipFile.getInputStream(entry)); File file = new File(filePath + entry.getName()); File parent = file.getParentFile(); if (parent!=null && (!parent.exists())) { parent.mkdirs(); } bos = new BufferedOutputStream(new FileOutputStream(file)); int count; while ((count=bis.read(data, 0, BUFFER)) != -1) { bos.write(data, 0, count); } bis.close(); bos.close(); } zipFile.close(); } catch(IOException e) { e.printStackTrace(); } } /** * To get a directory's all files. * @param sourceFile: the source directory * @return the files' collection */ private Vector<File> getAllFiles(File sourceFile) { Vector<File> fileVector = new Vector<File>(); if (sourceFile.isDirectory()) { File[] files = sourceFile.listFiles(); for (int i=0; i<files.length; i++) { fileVector.addAll(getAllFiles(files[i])); } } else { fileVector.add(sourceFile); } return fileVector; } private String getEntryName(String base,File file) { File baseFile=new File(base); String filename=file.getPath(); if(baseFile.getParentFile().getParentFile()==null) return filename.substring(baseFile.getParent().length()); return filename.substring(baseFile.getParent().length()+1); } /** * Show the compress or uncompress detail. * @param sourceFile: the source file * @param targetFile: the target file */ private void showDetail(File sourceFile, File targetFile) { long sourceFileLength = getDirectoryLength(sourceFile); long targetFileLength = targetFile.length(); System.out.println("The uncompress file's size is " + sourceFileLength + " bytes."); System.out.println("The compress file's size is " + targetFileLength + " bytes."); System.out.println("The compress rate is " + ((double)(sourceFileLength-targetFileLength)/(double)sourceFileLength)*100 + "%"); } /** * Get length of a directory. * @param path: the directory * @return the length of directory */ private long getDirectoryLength(File path) { if (path.isDirectory()) { File[] files = path.listFiles(); for (int i=0; i<files.length; i++) { getDirectoryLength(files[i]); } } else { length += path.length(); } return length; } public static void main(String[] args) {// if (args.length != 2) {// System.out.println("Usage: java ZipCompress zip/unzip E:/java/apps/zip/text");// return ;// }// Zip zip = new Zip();// if (args[0].equals("zip")) {// zip.compress(args[1]);// } else if(args[0].equals("unzip")) {// zip.uncompress(args[1]);// } else {// System.out.println("Error");// } Zip zip = new Zip(); zip.compress("D:/ziptest"); }}
public class UnZip { public static void main(String argv[]) { try { String outputDirectory = "D:/testzip/"; ZipFile zipFile = new ZipFile("D:/testzip/test.zip"); Enumeration e = zipFile.getEntries(); ZipEntry zipEntry = null; createDirectory(outputDirectory, ""); while (e.hasMoreElements()) { zipEntry = (ZipEntry) e.nextElement(); System.out.println("unziping " + zipEntry.getName()); if (zipEntry.isDirectory()) { String name = zipEntry.getName(); name = name.substring(0, name.length() - 1); File f = new File(outputDirectory + File.separator + name); f.mkdir(); } else { String fileName = zipEntry.getName(); fileName = fileName.replace('\\', '/'); if (fileName.indexOf("/") != -1) { createDirectory(outputDirectory, fileName.substring(0,fileName.lastIndexOf("/"))); } File f = new File(outputDirectory + zipEntry.getName()); f.createNewFile(); InputStream in = zipFile.getInputStream(zipEntry); FileOutputStream out = new FileOutputStream(f); byte[] by = new byte[1024]; int c; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } out.close(); in.close(); } } System.out.println("done!"); } catch (Exception ex) { System.out.println(ex.getMessage()); ex.printStackTrace(); } } private static void createDirectory(String directory, String subDirectory) { String dir[]; File fl = new File(directory); try { if (subDirectory == "" && fl.exists() != true) fl.mkdir(); else if (subDirectory != "") { dir = subDirectory.replace('\\', '/').split("/"); for (int i = 0; i < dir.length; i++) { File subFile = new File(directory + File.separator + dir[i]); if (subFile.exists() == false) subFile.mkdir(); directory += File.separator + dir[i]; } } } catch (Exception ex) { System.out.println(ex.getMessage()); } }}
0 0
- java 压缩和解压缩
- java 压缩和解压缩
- Java压缩和解压缩
- Java压缩和解压缩
- Java 压缩和解压缩
- JAVA压缩和解压缩
- java String的压缩和解压缩
- Android Java 字符串的压缩和解压缩
- java和C#的压缩和解压缩
- [java] jar 命令压缩和解压缩
- java实现文件打包、压缩和解压缩
- java String的压缩和解压缩
- java实现zip压缩和解压缩 源码
- JAVA实现多文件压缩和解压缩
- java压缩和解压缩tar格式
- Java zip/gzip文件压缩和解压缩
- 使用Java原生进行压缩和解压缩
- Java zip/gzip文件压缩和解压缩
- vs2010下设置release版本调试设置
- linux下close 掉socket 之后 阻塞的recv 不会立即返回
- Android真机调试手动添加程序包的LogCat
- 项目经理的职业化素养建设——石化干部管理学院培训
- Ubuntu14.04如何使用root登录
- Java压缩和解压缩
- 整理大型网站架构必知必会的几个服务器知识
- 采用web标准开发的好处
- 7款开源Java反编译工具
- 常见MFC UI界面库
- STL 容器介绍
- 传纸条
- 从技术走向管理——公开课培训记
- 表达式"x=x&(x-1)" 的作用