高级流包含了缓冲流、转换流、序列化流、打印流、压缩流、Commons-io 等等
缓冲流
字节缓冲流
字节缓冲流的底层原理:自带了长度为8192的缓冲区提高性能
字节缓冲流的构造方法:
字符缓冲流
字符缓冲流的底层原理:自带了长度为8192的缓冲区提高性能
字符缓冲流的构造方法:
而字符缓冲流区别于字节缓冲流一点的是他有独特方法
转换流
是字符流和字节流之间的桥梁
序列化流
可以把Java中的对象写到本地文件中
重点:需要java中的对象类继承Serializable接口
打印流
压缩流
解压缩流属于输入流,而压缩流属于输出流。
压缩包里的每一个文件用ZipEntry对象代替,那么解压本质就是:把每一个ZipEntry按照层级拷贝到本地另一个文件夹中。
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class zipInput {
public static void main(String[] args) throws IOException {
File src = new File("要解压的压缩包的路径");
File dis = new File("把解压的文件存放到哪个路径");
unZip(src, dis);
}
private static void unZip(File src, File dis) throws IOException {
//把目标文件传给zip输入流获取对象
ZipInputStream zis = new ZipInputStream(new FileInputStream(src));
//定义一个entry接收zip输入流里的文件或者文件夹
ZipEntry zipEntry;
while ((zipEntry = zis.getNextEntry()) != null) {
//如果当前是文件夹,就在目的路径创建一个一样的文件夹
//如果当前是文件,就拷贝下来
if (zipEntry.isDirectory()) {
File file = new File(src, zipEntry.toString());
file.mkdirs();
} else {
FileOutputStream fos = new FileOutputStream(new File(src,dis.toString()));
int b;
while ((b = zis.read()) != -1){
fos.write(b);
}
fos.close();
zis.close();
}
}
zis.close();
}
}
对于单个文件进行压缩:
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class zipOutput {
public static void main(String[] args) throws IOException {
File src = new File("你想压缩的文件路径");
File dest = new File("你想存放的压缩包路径");
toZip(src, dest);
}
private static void toZip(File src, File dest) throws IOException {
//获取zipoutput流的对象
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(src, "a.zip")));
//用entry代表是下载输出流中获取的文件
ZipEntry entry = new ZipEntry("你要压缩的文件");
//把entry对象放到压缩包中
zos.putNextEntry(entry);
//将获取到的文件内容,传送到压缩包中
FileInputStream fis = new FileInputStream(src);
int b;
while ((b = fis.read()) != -1) {
zos.write(b);
}
zos.closeEntry();
zos.close();
}
}
对于文件夹进行压缩:
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
//对于文件夹进行压缩,文件夹中包括文件和其他文件夹
public class FilezipOutput2 {
public static void main(String[] args) throws IOException {
File src = new File("你想压缩的文件夹");
File dest = new File("你想把压缩包存放的路径", src.getName() + ".zip");
//创建压缩流
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(src));
//创建压缩方法,参数1:压缩文件夹的路径;参数2:目标文件夹的压缩流;参数3:遍历到的文件或文件夹名字(压缩包内部的路径)
toZip2(src, zos, src.getName());
zos.close();
}
private static void toZip2(File src, ZipOutputStream zos, String name) throws IOException {
//将当前路径的所有文件或文件夹获取到
File[] files = src.listFiles();
//遍历文件夹数组进行判断
for (File file : files) {
if (file.isFile()) {
//把遍历到的文件变成entry对象,然后放到压缩流中
ZipEntry entry = new ZipEntry(name+"\\"+file.getName());
int b;
FileInputStream fis = new FileInputStream(file);
while ((b = fis.read()) != -1) {
zos.putNextEntry(entry);
}
fis.close();
zos.closeEntry();
} else {
toZip2(file, zos, name+"\\"+file.getName());
}
}
}
}