Java中的IO流④——解压缩流/压缩流、常用工具包
2023-12-13 13:19:44
目录
解压缩流/压缩流
解压缩流
代码示范
将一个.zip压缩包解压在E盘-->
package com.qiong.myzipstream; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ZipStreamDemo1 { public static void main(String[] args) throws IOException { //创建一个File表示要解压的压缩包 File src = new File("E:\\Data.zip"); //创建一个File表示解压的目的地 File dest = new File("E:\\"); //调用方法 unzip(src,dest); } //定义一个方法用来解压 public static void unzip(File src,File dest) throws IOException { //解压的本质:把压缩包里面的每一个文件或者文件夹读取出来,按照层级拷贝到目的地中 //创建一个解压缩流用来读取压缩包中的数据 ZipInputStream zip = new ZipInputStream(new FileInputStream(src)); //获取到压缩包里面的每一个zipentry对象 ZipEntry entry; while ((entry = zip.getNextEntry()) != null){ System.out.println(entry); if (entry.isDirectory()){ //文件夹:需要在目的地处创建一个同样的文件夹 File file = new File(dest,entry.toString()); file.mkdirs(); }else { //文件:需要读取到压缩包中的文件,并把它存放到目的地文件夹中(按照层级目录进行存放) FileOutputStream fos = new FileOutputStream(new File(dest,entry.toString())); int b; while ((b = zip.read()) != -1){ //写到目的地 fos.write(b); } fos.close(); //表示在压缩包中的一个文件处理完毕了。 zip.closeEntry(); } } //释放资源 zip.close(); } }
压缩流
代码示范
压缩单个文件-->
package com.qiong.myzipstream; import javax.swing.text.DefaultEditorKit; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipStreamDemo2 { public static void main(String[] args) throws IOException { /* 压缩流 需求: 把E:\\a.txt打包成一个压缩包 */ //创建File对象表示要压缩的文件 File src = new File("E:\\a.txt"); //创建File对象表示压缩包的位置 File dest = new File("E:\\"); //调用方法 toZip(src, dest); } /* 作用: 参数一:表示要压缩的文件 参数二:压缩包的位置 */ public static void toZip(File src, File dest) throws IOException { //创建压缩流关联压缩包 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest, "a.zip"))); //创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹 ZipEntry entry = new ZipEntry("a.txt"); //把ZipEntry对象放到压缩包当中 zos.putNextEntry(entry); //把src文件中的数据写到压缩包当中 FileInputStream fis = new FileInputStream(src); int b; while ((b = fis.read()) != -1) { zos.write(b); } zos.closeEntry(); zos.close(); } }
压缩整个文件夹-->
package com.qiong.myzipstream; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipStreamDemo3 { public static void main(String[] args) throws IOException { /* 压缩流 需求: 把E:\\Data文件夹压缩成一个压缩包 */ //创建File对象表示要压缩的文件夹 File src = new File("E:\\Data"); //创建File对象表示压缩包放在哪里(压缩包的父级路径) File destParent = src.getParentFile();//E:\\ //创建File对象表示压缩包的路径 File dest = new File(destParent,src.getName() + ".zip"); //创建压缩流关联压缩包 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest)); //获取src里面的每一个文件,变成ZipEntry对象,放入压缩包当中 toZip(src,zos,src.getName()); //释放资源 zos.close(); } /* 作用:获取src里面的每一个文件,变成ZipEntry对象,放入压缩包当中 参数一:数据源 参数二:压缩流 参数三:压缩包内部的路径 */ public static void toZip(File src,ZipOutputStream zos,String name) throws IOException { //进入src文件夹 File[] files = src.listFiles(); //遍历数组 for (File file : files) { if(file.isFile()){ //文件:变成ZipEntry对象,放入到压缩包当中 ZipEntry entry = new ZipEntry(name + "\\" + file.getName()); zos.putNextEntry(entry); //读取文件中的数据,写到压缩包 FileInputStream fis = new FileInputStream(file); int b; while ((b = fis.read()) != -1){ zos.write(b); } fis.close(); zos.closeEntry(); }else { //文件夹:递归 toZip(file,zos,name + "\\" + file.getName()); } } } }
Commons-io
Commons有非常多的工具类,此时我们要了解的是io工具类
使用步骤
常见方法
文件/文件夹相关
流相关
代码示范
package com.qiong.Commonsio; import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; public class CommonsIODemo1 { public static void main(String[] args) throws IOException { /*//复制文件 File src = new File("myio\\a.txt"); File dest = new File("myio\\copy.txt"); FileUtils.copyFile(src, dest);*/ /*//复制文件夹(直接拷贝文件夹里面的内容) File src = new File("E:\\aaa"); File dest = new File("E:\\bbb"); FileUtils.copyDirectory(src,dest); //复制文件夹(把数据源拷贝到文件夹) FileUtils.copyDirectoryToDirectory(src,dest);*/ /*//删除文件夹 File src = new File("E:\\bbb"); FileUtils.deleteDirectory(src);*/ /*//清空文件夹 File src = new File("E:\\bbb"); FileUtils.cleanDirectory(src);*/ //...... } }
Hutool
先了解下它的强大
接下来要了解Hutool的IO工具类
相关类
代码示范
package com.qiong.hutool; import cn.hutool.core.io.FileUtil; import java.io.File; import java.util.ArrayList; import java.util.List; public class Test1 { public static void main(String[] args) { /* FileUtil类: file:根据参数创建一个file对象 touch:根据参数创建文件 writeLines:把集合中的数据写出到文件中,覆盖模式 appendLines:把集合中的数据写出到文件中,续写模式 readLines:指定字符编码,把文件中的数据,读到集合中 readUtf8Lines:按照UTF-8的形式,把文件中的数据,读到集合中 copy:拷贝文件或者文件夹 */ /*//创建对象(可以有多个子级对象) File file = FileUtil.file("E:\\", "aaa", "bbb");*/ /*//创建文件(如果父级路径不存在,会把父级路径一起创建) File touch = FileUtil.touch("E:\\ddd\\a.txt"); System.out.println(touch);*/ /*//把集合中的数据写出到文件中,覆盖模式 ArrayList<String> list = new ArrayList<>(); list.add("aaa"); list.add("aab"); list.add("aac"); File file = FileUtil.writeLines(list, "E:\\a.txt", "UTF-8"); System.out.println(file);*/ /*//把集合中的数据写出到文件中,续写模式 ArrayList<String> list = new ArrayList<>(); list.add("aaa"); list.add("aab"); list.add("aac"); File file = FileUtil.appendLines(list, "E:\\a.txt", "UTF-8"); System.out.println(file);*/ /*//指定字符编码,把文件中的数据,读到集合中,一行数据为一个元素 List<String> list = FileUtil.readLines("E:\\a.txt", "UTF-8"); System.out.println(list);*/ } }
文章来源:https://blog.csdn.net/qingwan_91/article/details/134947596
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!