专栏【JavaSE】
喜欢的诗句:天行健,君子以自强不息。
音乐分享【如愿】
欢迎并且感谢大家指出小吉的问题
I/O流可分为输入流和输出流:
输入流:用于从数据源(如文件、键盘、网络连接等)读取数据。
输出流:用于向数据目标(如文件、屏幕、网络连接等)写入数据。
在许多编程语言中,都提供了用于处理I/O流的标准库或模块,开发人员可以使用这些工具来进行文件读写、网络通信等操作。I/O流的概念也适用于各种类型的数据处理,包括文本数据、二进制数据等。
打印流一般指PrintStream,PrintWriter两个类
字节
字节流底层
没有缓冲区
,开不开启自动刷新都一样
字符
字符流底层
有缓冲区
,想要自动刷新需要手动开启
要解压的压缩包最好是
.zip
的
把压缩包里面的每一个文件或者文件夹读取出来,按照层级拷贝到目的地中
我们在G盘创建一个压缩包aaa.zip,里面包含了文件夹a,文件夹里面有a.txt
我们运行下面的代码,来验证解压效果
package com.itheima.myzipstream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/*
* 解压缩流
*
* */
public class ZipStreamDemo1 {
public static void main(String[] args) throws IOException {
//1.创建一个File表示要解压的压缩包
File src = new File("G:\\aaa.zip");
//2.创建一个File表示解压的目的地
File dest = new File("G:\\");
//调用方法
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()){
//文件夹:需要在目的地dest处创建一个同样的文件夹
//调用toString方法,变为字符串
File file = new File(dest,entry.toString());
file.mkdirs();
}else{
//文件:需要读取到压缩包中的文件,并把他存放到 目的地dest文件夹 中(按照层级目录进行存放)
//new出来的文件路径和之前的一样
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.itheima.myzipstream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipStreamDemo2 {
public static void main(String[] args) throws IOException {
/*
* 压缩流
* 需求:
* 把D:\\a.txt打包成一个压缩包
* */
//1.创建File对象表示要压缩的文件
File src = new File("D:\\a.txt");
//2.创建File对象表示压缩包的位置
File dest = new File("D:\\");
//3.调用方法用来压缩
toZip(src,dest);
}
/*
* 作用:压缩
* 参数一:表示要压缩的文件
* 参数二:表示压缩包的位置
* */
public static void toZip(File src,File dest) throws IOException {
//1.创建压缩流关联压缩包
//des是父级路径
//a.zip是子级路径
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest,"a.zip")));
//2.创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹
//参数:压缩包里面的路径
ZipEntry entry = new ZipEntry("aaa\\bbb\\a.txt");
//3.把ZipEntry对象放到压缩包当中
zos.putNextEntry(entry);
//4.把src文件中的数据写到压缩包当中
FileInputStream fis = new FileInputStream(src);
int b;
while((b = fis.read()) != -1){
zos.write(b);
}
zos.closeEntry();
zos.close();
}
}
package IODemo4;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Demo2 {
public static void main(String[] args) throws IOException {
//创建File对象表示要压缩的文件夹
File src=new File("G:\\aaa");
//创建压缩包需要被放到哪里(压缩包的父级路径)
File destParent = src.getParentFile();//G:\\
//创建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();
}
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());
}
}
}
}
大家对于这篇文章如果有问题,欢迎在评论区进行讨论