Java案例:压缩与解压缩文件
2018-02-18 21:29
316 查看
1、任务(1)将单个文件压缩成一个zip文件(2)将整个目录压缩成一个zip文件(3)将zip压缩文件解压缩到指定目录
2、知识点(1)ZipInputStream,ZipOutputStream(2)ZipFile(3)ZipEntry(4)File,FileInputStream,FileOutputStream(5)Enumeration(6)ArrayList
3、Java代码
3、运行结果
==单个文件压缩==
源文件:d:\love.txt压缩文件:d:\love.zip
==整个目录压缩成文件==
源目录:d:\data
d:\data\abc1.prgd:\data\abc2.prgd:\data\course.CDXd:\data\example2_41.PRGd:\data\java\HelloMobile.classd:\data\java\HelloMobile.javad:\data\java\HelloWorld.classd:\data\java\HelloWorld.java
压缩文件:d:\data.zip
==解压缩文件==
压缩文件:d:\lzy.zip解压缩目录:d:\hw_file
解压缩文件:d:\hw_file\hw\bird.txt解压缩文件:d:\hw_file\hw\css\hate.css解压缩文件:d:\hw_file\hw\css\index.css解压缩文件:d:\hw_file\hw\css\love.css解压缩文件:d:\hw_file\hw\jsp\hate.jsp解压缩文件:d:\hw_file\hw\jsp\index.jsp解压缩文件:d:\hw_file\hw\jsp\love.jsp解压缩文件:d:\hw_file\hw\love.txt
2、知识点(1)ZipInputStream,ZipOutputStream(2)ZipFile(3)ZipEntry(4)File,FileInputStream,FileOutputStream(5)Enumeration(6)ArrayList
3、Java代码
/** * 功能:演示ZipInputStream与ZipOutputStream用法 * 创建压缩文件(单个文件,整个目录) * 解压缩文件到指定目录 * 作者:华卫 * 日期:2015年5月27日 */ package net.hw.file; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; public class ZipStreamDemo { public static void main(String[] args) { /** * 测试createZipFromFile方法 */ String strSrcFileName = "d:/love.txt"; String strZipFileName = "d:/love.zip"; File srcFile = new File(strSrcFileName); // 源文件 File zipFile = new File(strZipFileName); // 目标文件 createZipFromFile(srcFile, zipFile); // 创建压缩文件 System.out.println("==单个文件压缩==\n"); System.out.println("源文件:" + srcFile.getPath()); System.out.println("压缩文件:" + zipFile.getPath() + "\n"); /** * 测试createZipFromDir方法 */ String strSrcDir = "d:/data"; strZipFileName = "d:/data.zip"; File srcDir = new File(strSrcDir); // 源目录 zipFile = new File(strZipFileName); // 目标文件 System.out.println("==整个目录压缩成文件==\n"); System.out.println("源目录:" + srcDir.getPath() + "\n"); createZipFromDir(srcDir, zipFile); // 创建压缩文件 System.out.println("\n压缩文件:" + zipFile.getPath() + "\n"); /** * 测试extractZipToFiles方法 */ System.out.println("==解压缩文件==\n"); srcFile = new File("d:/lzy.zip"); // 源文件 File extractDir = new File("d:/hw_file"); // 解压缩目录 extractDir.mkdir(); // 创建目录 List<String> file_list = extractZipToFiles(srcFile, extractDir); // 解压缩文件,获得文件名列表 System.out.println("压缩文件:" + srcFile.getPath()); System.out.println("解压缩目录:" + extractDir.getPath() + "\n"); // 输出解压缩文件名列表 for (String file : file_list) { System.out.println("解压缩文件:" + file); } } /** * 由单个文件创建压缩文件 * * @param srcFile 源文件 * @param zipFile 目标文件 */ public static void createZipFromFile(File srcFile, File zipFile) { try { // 创建ZipOutputStream对象 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream( zipFile)); // 创建ZipEntry对象,设置相关属性 ZipEntry entry = new ZipEntry(srcFile.getName()); entry.setSize(srcFile.length()); entry.setTime(srcFile.lastModified()); // 将entry加入zos zos.putNextEntry(entry); // 将srcFile文件内容写入zipFile FileInputStream fis = new FileInputStream(srcFile); int length = fis.available(); byte[] buffer = new byte[length]; zos.write(buffer); // 关闭流 fis.close(); zos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 将整个目录压缩成文件 * * @param srcDir 源目录 * @param zipFile 压缩文件 */ public static void createZipFromDir(File srcDir, File zipFile) { try { // 创建ZipOutputStream对象 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream( zipFile)); // 获得源目录下的文件列表 ArrayList<String> file_list = new ArrayList<String>(); list(srcDir, file_list); for (String file_name : file_list) { System.out.println(file_name); File srcFile = new File(file_name); // 创建ZipEntry对象,设置相关属性 ZipEntry entry = new ZipEntry(srcFile.getPath().substring( srcDir.getName().length() - 1)); entry.setSize(srcFile.length()); entry.setTime(srcFile.lastModified()); // 将entry加入zos zos.putNextEntry(entry); // 将srcFile文件内容写入zipFile FileInputStream fis = new FileInputStream(srcFile); int length = fis.available(); byte[] buffer = new byte[length]; zos.write(buffer); // 关闭流 fis.close(); } zos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 获取指定目录下所有文件(包含子目录) * * @param dir 指定目录 * @param file_list 文件名列表 */ public static void list(File dir, ArrayList<String> file_list) { File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { file_list.add(files[i].getPath()); } else { if (files[i].list() != null) { list(files[i], file_list); } } } } /** * 解压缩文件到指定目录 * * @param zipFile 压缩文件 * @param extractDir 解压缩目录 * @return 解压之后的文件名列表 */ public static List<String> extractZipToFiles(File srcFile, File extractDir) { List<String> file_list = new ArrayList<String>(); try { // 创建压缩文件对象 ZipFile zipFile = new ZipFile(srcFile); // 获得压缩文件的entry列表 Enumeration entry_list = zipFile.entries(); ZipEntry entry = null; // 遍历压缩文件的entry列表 while (entry_list.hasMoreElements()) { entry = (ZipEntry) entry_list.nextElement(); if (entry.isDirectory()) { // 略过目录 continue; } // 目标文件全名 String objFileFullName = extractDir.getPath() + "/" + entry.getName(); // 目标文件的目录 String strDir = objFileFullName.substring(0, objFileFullName.lastIndexOf('/')); // 目标文件的文件名 String strFileName = objFileFullName.substring(objFileFullName .lastIndexOf('/') + 1); // 创建目标文件所在的目录 File dir = new File(strDir); dir.mkdir(); // 创建目标文件名 File objFile = new File(dir, strFileName); // 创建文件字节输出流 FileOutputStream fos = new FileOutputStream(objFile); // 通过压缩条目获得输入流 InputStream in = zipFile.getInputStream(entry); // 写入目标文件 int length = in.available(); byte[] buffer = new byte[length]; fos.write(buffer); fos.flush(); // 目标文件全名添加入文件列表 file_list.add(objFile.getAbsolutePath()); } zipFile.close(); } catch (ZipException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return file_list; } }
3、运行结果
==单个文件压缩==
源文件:d:\love.txt压缩文件:d:\love.zip
==整个目录压缩成文件==
源目录:d:\data
d:\data\abc1.prgd:\data\abc2.prgd:\data\course.CDXd:\data\example2_41.PRGd:\data\java\HelloMobile.classd:\data\java\HelloMobile.javad:\data\java\HelloWorld.classd:\data\java\HelloWorld.java
压缩文件:d:\data.zip
==解压缩文件==
压缩文件:d:\lzy.zip解压缩目录:d:\hw_file
解压缩文件:d:\hw_file\hw\bird.txt解压缩文件:d:\hw_file\hw\css\hate.css解压缩文件:d:\hw_file\hw\css\index.css解压缩文件:d:\hw_file\hw\css\love.css解压缩文件:d:\hw_file\hw\jsp\hate.jsp解压缩文件:d:\hw_file\hw\jsp\index.jsp解压缩文件:d:\hw_file\hw\jsp\love.jsp解压缩文件:d:\hw_file\hw\love.txt
相关文章推荐
- java对zip压缩文件解压缩
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java压缩与解压缩文件(利用apache的ant.jar)
- Java ZIP文件压缩与解压缩
- java压缩与解压缩文件(利用apache的ant.jar) .
- Java ZIP文件压缩与解压缩
- java实现文件zip压缩或者解压缩
- Java文件压缩与解压缩(三)
- [Java] Java Zip文件压缩与解压缩
- 多文件压缩与解压缩(JAVA)
- Java 解压缩 zip格式的压缩文件
- Java压缩与解压缩文件2
- Java文件压缩与解压缩(三)
- JAVA 实现压缩与解压缩 rar和zip格式的文件
- java编程笔记18 文件压缩与解压缩
- Java文件压缩与解压缩(二)
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- Java文件压缩与解压缩(四)
- java 对多文件进行压缩与解压缩代码
- Java实现Zip压缩/解压缩目录中的所有文件