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

// 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方法得到的是两个字节(保证原样性但大小改变)
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值