打印流
IO流打印流是Java中用来将数据打印到输出流的工具。打印流提供了方便的方法来格式化和输出数据,可以用于将数据输出到控制台、文件或网络连接。
分类:打印流一般是指:PrintStream,PrintWriter两个类
特点1:打印流只操作文件目的地,不操作数据源
特点2:特有的写出方法可以实现,数据原样写出
字节打印流:默认自动刷新,特有的println自动换行
字符打印流:自动刷新需要开启,特有的println自动换行
例如:打印:97 文件中:97
打印:true 文件中:true
特点3:特有的写出方法,可以实现自动刷新,自动换行打印一次数据 =写出+换行+刷新
字节打印流
构造方法
public PrintStream(OutputStream/File/String) 关联字节输出流/文件/文件路径public PrintStream(String fileName,Charset charset) 指定字符编码
public PrintStream(OutputStream out,boolean autoFlush)自动刷新
public PrintStream(0utputStream out, boolean autoflush, String encoding)指定字符编码且自动刷新
字节流底层没有缓冲区,开不开自动刷新都一样
成员方法
public voidwrite(int b) 常规方法:规则跟之前一样,将指定的字节写出
public void println(Xxx xx) 特有方法:打印任意数据,自动刷新,自动换行
public void print(Xxx xx) 特有方法:打印任意数据,不换行
public void printf(String format,Object... args) 特有方法:带有占位符的打印语句,不换行
package printstream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintStreamDemo1 {
public static void main(String[] args) throws FileNotFoundException {
PrintStream ps=new PrintStream(new FileOutputStream("..\\Myio\\a.txt"));
ps.println(97);//打印任意数据,自动刷新,自动换行
ps.print(true);//打印任意数据,不换行
ps.printf("%s等于%d","i",1);//带有占位符的打印语句,不换行
ps.close();
}
}
字符打印流
字符流底层有缓冲区,想要自动刷新需要开启
构造方法
public PrintWriter(write/File/string) 关联字节输出流/文件/文件路径
public PrintWriter(String fileName,Charset charset) 指定字符编码
public PrintWriter(writew,boolean autoFlush) 自动刷新
public PrintWriter(OutputStream out, boolean autoFlush, Charset charset)指定字符编码且自动刷新
成员方法
public void write(...) 常规方法:规则跟之前一样,写出字节或者字符串
public void println(Xxx xx) 特有方法:打印任意类型的数据并且换行
public void print(Xxx xx) 特有方法:打印任意类型的数据,不换行
public void printf(String format,Object... args)特有方法:带有占位符的打印语句
package printstream;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.PrintWriter;
public class PrintStreamDemo2 {
public static void main(String[] args) throws FileNotFoundException {
PrintWriter pw=new PrintWriter(new PrintStream("..\\Myio\\a.txt"),true);
//写出数据
pw.println("你好");
pw.print(true);
pw.printf("%s等于%d","i",1);
//释放资源
pw.close();
}
}
我们平时写的输出语句就是一个打印流System.out.println();
获取打印流的对象,此打印流在虚拟机启动的时候,由虚拟机创建,默认指向控制台特殊的打印流,系统中的标准输出流,是不能关闭,在系统中是唯一的。
解压缩流与压缩流
解压缩流
解压的本质:把压缩包里面的每一个文件或者按照层级拷贝到目的地当中
package zipstream;
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 {
//创建一个File表示要解压的压缩包
File src=new File("E:\\222.zip");
//创建一个File表示要解压的目的地
File end=new File("E:\\");
unzip(src,end);
}
public static void unzip(File src,File end) throws IOException {
//创建解压缩流用来读取压缩包中的数据
ZipInputStream zis=new ZipInputStream(new FileInputStream(src));
//要先获取到压缩包里面的每一个zipentry对象
ZipEntry zipEntry;
while ((zipEntry=zis.getNextEntry())!=null){
System.out.println(zipEntry);
if(zipEntry.isDirectory()){
//是文件夹:再目的地end处创建一个同样的文件夹
File file=new File(end,zipEntry.toString());
file.mkdirs();
}
else{
//是文件:需要读取到压缩包中的文件,并把他存放到目的地end文件中(按照层级目录进行存放)
FileOutputStream fos=new FileOutputStream(new File(end,zipEntry.toString()));
int b=0;
while ((b=zis.read())!=-1){
//写到目的地
fos.write(b);
}
fos.close();
zis.closeEntry();
}
}
zis.close();
}
}
大家可以试一试,别设置中文名字的
压缩流
压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中
压缩单个文件
package zipstream;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipStreamDemo2 {
public static void main(String[] args) throws IOException {
//创建File对象表示要压缩的文件
File src=new File("E:\\a.txt");
//创建File对象表示压缩包的位置
File end=new File("E:\\");
toZip(src,end);
}
public static void toZip(File src,File end) throws IOException {
//创建压缩流关联压缩包
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(end,"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 zipstream;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipStreamDemo3 {
public static void main(String[] args) throws IOException {
//创建File对象表示要压缩的文件夹
File src=new File("E:\\222");
//创建File对象表示压缩包放在哪里(压缩包的父级路径)
File endParent=src.getParentFile();
//创建File对象表示压缩包的路径
File end=new File(endParent,src.getName()+".zip");
//创建压缩流关联压缩包
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(end));
//获取src里面的每一个文件,变成zipEntry对象,放入到压缩包当中
toZip(src,zos,src.getName());
//释放资源
zos.close();
}
public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
//1.进入src文件夹
File[] files = src.listFiles();
//2.遍历数组
for (File file : files) {
if (file.isFile()) {
//3.判断-文件,变成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 {
//4.判断-文件夹,递归
toZip(file, zos, name + "\\" + file.getName());
}
}
}
}
打印流与压缩流就说到这里啦
努力遇见更好的自己!!!