23-IO流-49-IO流(打印流-PrintWriter)

来源:互联网 发布:网络安全产品有哪些 编辑:程序博客网 时间:2024/06/15 04:53
// 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方法得到的是两个字节(保证原样性但大小改变) */

0 0
原创粉丝点击