java 21 - 12 IO流的打印流
打印流
字节流打印流 PrintStream
字符打印流 PrintWriter
打印流的特点:
A:只有写数据的,没有读取数据。只能操作目的地,不能操作数据源。(只能写入数据到文件中,而不能从文件中提取数据)
B:可以操作任意类型的数据。
C:如果启动了自动刷新,能够自动刷新。
D:该流是可以直接操作文本文件的。
哪些流对象是可以直接操作文本文件的呢?
FileInputStream
FileOutputStream
FileReader
FileWriter
PrintStream
PrintWriter
看API,查流对象的构造方法,如果同时有File类型和String类型的参数,一般来说就是可以直接操作文件的。
流如果按操作分:
基本流:就是能够直接读写文件的
高级流:在基本流基础上提供了一些其他的功能
作为Writer的子类使用:
1 public static void main(String[] args) throws IOException { 2 // 作为Writer的子类使用 3 PrintWriter pw = new PrintWriter("pw.txt"); 4 5 pw.write("hello"); 6 pw.write("world"); 7 pw.write("java"); 8 9 pw.close(); 10 }
打印流的特点:
1:可以操作任意类型的数据。
print()
println()
2:启动自动刷新
PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"), true);
还是应该调用println()的方法才可以
这个时候不仅仅自动刷新了,还实现了数据的换行。
这里的println()
其实等价于于:
bw.write();
bw.newLine();
bw.flush();
PrintWriter实现自动刷新和自动换行:
1 public static void main(String[] args) throws IOException { 2 // 创建打印流对象 3 PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"), true); 4 5 pw.println("hello"); 6 pw.println(true); 7 pw.println(100); 8 9 pw.close(); 10 }
之前单纯用字符流来复制文本:
1 // 封装数据源 2 BufferedReader br = new BufferedReader(new FileReader( 3 "DataStreamDemo.java")); 4 // 封装目的地 5 BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java")); 6 7 String line = null; 8 while ((line = br.readLine()) != null) { 9 bw.write(line); 10 bw.newLine(); 11 bw.flush(); 12 } 13 14 bw.close(); 15 br.close();
使用打印流来改进之前的复制文本例子
1 public static void main(String[] args) throws IOException { 2 //封装数据源,文本文件,用字符流 3 BufferedReader br = new BufferedReader(new FileReader("DataStreamDemo.java")); 4 //封装目的地 5 PrintWriter pw = new PrintWriter(new FileWriter("Copy.java"),true); 6 //读取数据,并写入数据 7 String line = null; 8 while((line = br.readLine()) != null){ 9 pw.println(line); //这里一句相当于以前3句 10 } 11 //释放资源 12 br.close(); 13 pw.close(); 14 15 }
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持