// PrintWriter类的构造函数可接收项目比PrintStream多一个,即可以接收字符流Writer
package demo;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class PrintWriterDemo {
public static void main(String[] args) throws IOException {
/**
* PrintWriter:字符打印流
* 可接收对象四种:字符串路径、File对象、字节输出流、字符输出流
*/
// printWriterDemo_1();
printWriterDemo_2();
}
public static void printWriterDemo_1() throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out);
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
/*
* 这里必须定义结束标记over,如果靠点击consoles窗口按钮结束且没有下面的flush,那么控制台上显示不出来,因为这个点击按钮
* 动作类似于cmd命令窗口中的ctrl+c操作,即终止当前程序运行,那么下面的close语句执行不到,所以也就没有刷新(close内部
* 自带刷新动作),所以控制台上什么都没有
*/
out.println(line);
out.flush();//这里必须刷新,如果不flush,那么println实际是往缓冲区里面打印,控制台上显示不出来
/*
* 如果不刷新,可以通过使用构造函数:
* public PrintWriter(OutputStream out,boolean autoFlush):自动刷新功能
* 其中参数autoFlush - boolean 变量;如果为 true,则 println、printf 或 format 方法将刷新输出缓冲区
*
* 如果用了这个构造函数,则调用println()方法无需flush。
*/
}
out.close();
bufr.close();
}
public static void printWriterDemo_2() throws IOException {
//【需求】用PrintWriter将从键盘录入的数据写入文件中,并启用自动刷新功能(无需flush)
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new FileWriter("out.txt"),true);
//这里成功实现需求,new FileWriter("out.txt")实际是字符输出流,指定true为了方便下面调用println方法实现自动刷新功能
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
out.println(line);
}
out.close();
bufr.close();
}
}
/*
* 【总结】需求保证数据原样性,用PrintStream或PrintWriter,但是这样无法保证数据大小(如前一个视频,同样是97,
* write方法得到的是一个字节的字母a(保证大小但不保证原样性),而print方法得到的是两个字节(保证原样性但大小改变)
*/
23-IO流-49-IO流(打印流-PrintWriter)
最新推荐文章于 2024-05-05 20:29:22 发布