java IO详解

记录下Io中的printWriter(打印字符),io中的类太多,在这里记录下,初学者,水平有限,写错勿怪

在需要打印字符而不是字节流,使用PrintWriter

查看API发现构造方法被重载多次,但是都没有自动刷新缓冲功能

public PrintWrtier(File filename){

}

public PrintWrtier(File filename,String csn){

}

public PrintWrtier(String strname){

}

public PrintWrtier(String strname,String csn){

}

查看文档发现其实该方法其实内部是使用了this关键字调用了BufferWriter的构造方法,使用默认平台编码将字符流解码成字节。

public PrintWriter(File file) throws FileNotFoundException {

    this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),false);

}

PrintWriter:没有提供字符集。

BufferedWriter: 提供了一个默认大小的字符缓冲区,没有提供默认的字符集。

如果不使用缓冲,通过OutputStreamWriter使用平台的默认的字符编码将字符解码成字节,然后直接就写入,效果低下。

如果使用了缓冲,通过OutputStreamWriter使用平台的默认的字符编码将字符解码成字节放在默认大小的缓冲区中,然后在写入。BufferedWriter 并不能将字符解码字节,是靠其OutputStreamWriter使用平台默认字符集将字符解码成字节。

OutputStreamWriter:提供了字符集,将缓冲流中的字符使用默认的字符集解码成字节,解码也可以理解成转化,转化字符流或者解码字符流,是字符到字节的一个桥梁。

File | String都是表示一个文件。

PrintWriter中有一个刷新缓冲,刷新的缓冲是BufferedWriter。

真正提供字符集和解码字节的其实是OutputStreamWriter。

FileWriter:是个字符便捷类,调用了父类中的构造方法,参数也是先传递给父类,自己没有任何操作,这也是为什么没有自己的子类方法,只是将名字缩短了,其功能是父类的,也是为什么叫做便捷类的原因。

FileWriter fw=new File(filename);

//等同于outputStreamWriter;

OutputStreamWriter osw=new OutputStream(new FileOutputStream(filename));

以下三个都是差不多的都是使用默认缓冲大小和默认平台字符集将字符解码成字节

PrintWriter pw = new PrintWriter(filenname);//1

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename)));//2

BufferedWriter bww = new BufferedWriter(new FileWriter(filename))//3

Buffered子类中的方法

writer(int c);//写入单个字符

write(String str ,int start ,int end );将该字符串中的一部分数据写入到输出流

write(Char[] c:int start,int end);//将该数组中的一部分数据写入到输出流中

writeNewLine();//将一个行分隔符写入到输出流中

//继承的父类writer方法

write(char[]);//将该数组中的字节都写入到输出流中

write(String str);//将指定的字符串写入到输出流中

简单点就是将单个字符、数组、字符串写入到输出流中

拿一段文字示范下

BufferedWriter bw=null;

try {

// 将字符使用默认字符集解码成字节写入到目标文件中

bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("hello.txt")));

bw.write(" 张三");

bw.newLine();

bw.write("李四");

// 强制清空缓冲区写入到文件中

bw.flush();

//如果目标不是文件,则无法关闭该流,或者使用File.exists()判断是否存在

bw.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {在此我向大家推荐一个架构学习交流群。交流学习群号:938837867 暗号:555 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备

e.printStackTrace();

}

使用printWriter,此类中的方法都不会抛出io异常

try{

//将字符使用默认字符集转换成字节写入到目标文件中

PrintWriter pw=new PrintWriter(" hello.txt");

pw.println("张三");

pw.println("李四");

}catch(FileNotFoundException e){

e.printStackTrace();

}finally{

pw.flush();

pw.close();

}

在此我向大家推荐一个架构学习交流群。交流学习群号:938837867 暗号:555 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备

你可能感兴趣的:(java IO详解)