1. 打印流的概述和特点
- 字节打印流(PrintStream)
- 字符打印流(PrintWriter)
特点 : A:只操作目的地,不操作数据源
B:可以操作任意类型的数据
C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
D:可以直接操作文件
问题:哪些流可以直接操作文件呢?
看API,如果其构造方法能够同时接收File和String类型的参数,一般都是可以直接操作文件的
2. PrintWriter作为Writer的子类使用
package zywaf.yty.practice_01;
import java.io.IOException;
import java.io.PrintWriter;
public class PrintWriterDemo {
public static void main(String[] args) throws IOException {
PrintWriter pw = new PrintWriter("pw.txt");
pw.write("hello");
pw.write("world");
pw.write("java");
pw.close();
}
}
3. PrintWriter实现自动刷新和换行
PrintWriter
public PrintWriter(Writer out,
boolean autoFlush)
创建新 PrintWriter。
参数:
out - 字符输出流
autoFlush - boolean 变量;如果为 true,则 println、 printf 或 format 方法将刷新输出缓冲区
println()其实等价于:
bw.write();
bw.newLine();
bw.flush();
package zywaf.yty.practice_02;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class PrintWriterDemo {
public static void main(String[] args) throws IOException {
// PrintWriter pw = new PrintWriter("pw2.txt");
//
// pw.print(true);
// pw.print(100);
// pw.print("hello");
//
// pw.close();
PrintWriter pw = new PrintWriter(new FileWriter("pw3.txt"), true);
pw.println("hello");
pw.println(true);
pw.println(100);
}
}
4. 打印流改进复制文本文件案例(把BufferedReader与BufferedWriter用PrintWriter替换)
package zywaf.yty.practice_03;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class CopyFileDemo {
public static void main(String[] args) throws IOException {
// 老版本
// BufferedReader br = new BufferedReader(new FileReader("PrintWriterDemo.java"));
// BufferedWriter bw = new BufferedWriter(new FileWriter("pw6.txt"));
//
// String line = null;
// while ((line = br.readLine()) != null) {
// bw.write(line);
// bw.newLine();
// bw.flush();
// }
//
// bw.close();
// br.close();
// 打印流的改进版
BufferedReader br = new BufferedReader(new FileReader("PrintWriterDemo.java"));
PrintWriter pw = new PrintWriter(new FileWriter("pw66.txt"), true);
String line = null;
while ((line = br.readLine()) != null) {
pw.println(line);
}
pw.close();
br.close();
}
}