JAVA Zip压缩文件
程序员文章站
2022-07-12 12:36:19
...
从中午开始学习压缩流的使用一直到现在才搞定压缩,最后发现居然是两个反斜杠错了 感觉都不会爱了,,,哈哈
java.util.zip包中提供了一系列的类可以来实现zip的压缩,
Zip压缩流的创建与其他的流的创建没有什么区别;例如
ZipOutputStream ops = new ZipOutputStream(new FileOutputStream("D:\\test.zip"));
ZIP输入流打开后,你可以使用getNextEntry方法来读取ZIP文件中的条目数,该方法返回一个ZipEntry对象。如果到达文件的尾部,getNextEntry返回null:
ZipEntry entry; while((entry = zin.getNextEntry()) != null) { // extract data // open output streams } |
实现单文件的压缩;
代码如下;
首先在D盘中创建要压缩的文件夹
package ZIP文件流; 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.io.ObjectOutputStream.PutField; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * Zip格式的文件压缩 * @author Administrator * */ public class Copy2Test { public static void main(String[] args) { //单文件压缩 Copy2Txt(); } /** * 压缩单文件的方法 * 1,定义文件压缩输出流 * 2,实例化一个文件压缩的对象 * 3,创建文件输入流 * 4,将输入流写到文件压缩流中 * @throws FileNotFoundException */ public static void Copy2Txt() { try{ //1,创建文件输出时的文件 ZipOutputStream ops = new ZipOutputStream(new FileOutputStream("D:\\test.zip")); //2,创建输出文件中的对象 ZipEntry entry = new ZipEntry("ab.txt"); //创建一个文档注释 ops.setComment("Here is how we compressed in Java"); //将对象放到压缩文档中 ops.putNextEntry(entry); //3,创建文件输入流 InputStream fis = new FileInputStream("D:\\ab.txt"); // int len = 0; // while ((len = fis.read()) != -1) // ops.write(len); int len = fis.read(); while(len !=-1){ ops.write(len); len = fis.read(); } fis.close(); ops.close(); }catch(Exception e){ e.printStackTrace(); } } }
源文件与压缩后的文件
源文件中的内容
压缩文件中的内容
压缩多个文件的代码如下;
package ZIP文件流; 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.io.ObjectOutputStream.PutField; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * Zip格式的文件压缩 * @author Administrator * */ public class Copy2Test { public static void main(String[] args) { //多文件压缩 Copy2Demo(); System.out.println("//////"); } /*** *多文件压缩 */ public static void Copy2Demo() { try { File file = new File("F:\\test"); //1,创建文件输出时的文件 ZipOutputStream zop = new ZipOutputStream(new FileOutputStream("F:\\test.zip")); zop.setComment("多文本压缩"); isFile(zop,file,""); zop.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 判断文件还是文件目录 * @param zop 输出流 * @param file 文件 * @param dir 目录名字 * @throws IOException */ private static void isFile(ZipOutputStream zop,File file,String dir) throws IOException{ //如果是目录 if(file.isDirectory()){ //将文件保存到文件数组中 File[] fil = file.listFiles(); //遍历出来 for(File files: fil ){ isFile(zop,files,dir+"\\"+file.getName()); } }else{ String entryName = null; //判断文件名是否为空 if(!"".equals(dir)){ entryName = dir+"\\"+file.getName(); } else{ entryName = file.getName(); } //根据获取到的名字创建文件对象 ZipEntry entrys = new ZipEntry(entryName); zop.putNextEntry(entrys); //创建文件输入流 InputStream fim = new FileInputStream(file); int lens =fim.read(); while(lens!=-1){ zop.write(lens); lens = fim.read(); } fim.close(); } } }
源文件与压缩文件
压缩文件中被压缩的文件
压缩文件中Testfile中的文件
上一篇: JDBC中事务处理应用
下一篇: C++基础知识