8_流的基本操作及转换流的使用


流操作的基本规律:
通过三个明确来完成。
1.明确源和目的
源:输入流 。 InputStream  Reader
目的:输出流 OutputStream   Writer.

2.操作数据是否是纯文本
是:字符流
不是:字节流
3.当体系明确后,在明确要使用那个具体的对象
通过设备来区分:
源设备:内出,硬盘,键盘
目的设备:内存,硬盘,控制台

需求:
1.将一个文本文件中的数据存储到另一个文件中---复制文件。
源:因为是源,所以使用读取流。InputStream Reader
是不是操作文本文件?
是:这是选择Reader
这样体系就明确了。

接下来要明确使用该体系中的那个对象。
明确设备:硬盘。上的一个文件。
reader体系中可以操作文件的对象是FileReader

是否需要提高效率:是:加入Reader体系中的缓冲区 BufferedReader
FileReader fr=new FileReader("a.txt");
BufferedReader bufr=new BufferedReader(fr);


目的:OutputStream  Writer
是否是纯文本的。
是!Writer
设备:硬盘,一个文件
Writer体系总可以操作文件的对象FileWriter
是否需要提高效率:是:加入Writer体系中的缓冲区 BufferedWriter
FileWriter fw=new FileWriter("b.txt");
BufferedWriter bufw=new BufferedWriter(fw);
               FileReader fr=new FileReader("a.txt");
		BufferedReader bufr=new BufferedReader(fr);
		
		FileWriter fw=new FileWriter("b.txt");
		BufferedWriter bufw=new BufferedWriter(fw);
		
		String line=null;
		while((line=bufr.readLine())!=null)
		{
			bufw.write(line);
			bufw.flush();
		}
		bufr.close();
		bufw.close();
需求:
将键盘录入的数据保存到一个文件中
这个需求中有源和目的都存在
那么分别分析
源:InputStream  Reader
是不是纯文本?是!Reader

设备:键盘。对应的对象是System.in
不是选择Reader么?System.in对应的不是字节流么?
为了操作键盘的文本数据方便。转成字符流按照字符串操作时最方便的。
所以既然明确了Reader,那么就将System.in转成Reader
用了Reader体系中的转换流。InputStreamReader
InputStreamReader isr=new InputStreamReader(System.in);

需要提高效率么?需要:BufferedReader
BufferedReader bufr=new BufferedReader(isr);

目的:OutputStream  Writer
是否是纯文本?是!Writer
设备:硬盘,一个文件。使用FileWriter.
FileWriter fw=new FileWriter("a.txt");
需要提高效率么?需要:
BufferedWriter bufw=new BufferedWriter(fw);


//键盘录入对象
		InputStream ps=System.in;
		//为了操作键盘的文本数据方便。转成字符流按照字符串操作时最方便的
		InputStreamReader isr=new InputStreamReader(ps);
		//提交效率
		BufferedReader bufr=new BufferedReader(isr); 
		
		
		//提高效率
		BufferedWriter bufw=new BufferedWriter(new FileWriter("D:\\b\\input11111.txt"));
		
		String line=null;
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			bufw.write(line);
			bufw.newLine();
			bufw.flush();
		}
		bufw.close();
		bufr.close();



扩展:
把录入的数据按照指定的编码表,将数据存到文件中

目的:OutputStream  Writer
是否是纯文本?是!Writer
设备:硬盘,一个文件。使用FileWriter.
但是FileWriter是使用的默认编码表。gbk

但是存储时,需要加入指定的编码表,而指定的编码表只有转化流可以指定。
所以要使用的对象是OutputStreamWriter.
而该转化流对象要接收一个字节输出流。而且还可以操作的文件的字节输出流。FileOutputStream

OutputStreamWriter osw=new OutputStreamWrieter(new FileOutstream("d.txt"),utf-8));

需要高效么?需要:
BufferedWriter bufw=new BufferedWriter(osw);

所以,记住,转换流什么时候使用?字符和字节的桥梁。通常,涉及到字符编码转换时,需要用到转换流
//键盘录入对象
		InputStream ps=System.in;
		//为了操作键盘的文本数据方便。转成字符流按照字符串操作时最方便的
		InputStreamReader isr=new InputStreamReader(ps);
		//提交效率
		BufferedReader bufr=new BufferedReader(isr); 
		
		//存储时,需要加入指定的编码表,而指定的编码表只有转化流可以指定
		OutputStreamWriter isw=new OutputStreamWriter(new FileOutputStream("D:\\b\\input11111.txt"),"utf-8");
		//提高效率
		BufferedWriter bufw=new BufferedWriter(isw);
		
		String line=null;
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			bufw.write(line);
			bufw.newLine();
			bufw.flush();
		}
		bufw.close();
		bufr.close();


将异常信息输入到文件中并附加上日期:

import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		try {
			int arr[]=new int[2];
			System.out.println(arr[3]);
		} catch (Exception e) {
			
			try {
				Date d=new Date();
				SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				String s=sdf.format(d);
				PrintStream ps=new PrintStream("D:\\b\\datelog.log");
				ps.println(s);
				System.setOut(ps);
			} catch (Exception e2) {
				throw new RuntimeException("日志文件异常");
			}
			e.printStackTrace(System.out);
		}
	}

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值