IO操作流总结


import java.io.*;


/*

IO流的操作规律。
三个明确:

1,明确源(读)和目的(写)。
其实就是在明确输入流还是输出流。
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer


2,明确操作的数据内容。
其实就是在明确字符流还是字节流。
如果数据都是纯文本数据使用字符流。
如果数据是非文本数据使用字节流。

前两步已经明确了使用哪一个体系。


3,明确具体的设备。
明确使用的具体对象。

源设备:内存,键盘(System.in),硬盘(文本)(File)。
目的设备:内存,控制台(System.out),硬盘(文件)(File).

扩展部分:需要进行高效操作吗?
是:加入缓冲区技术(Buffered)。


--------------------------------------------------
需求1:
读取键盘,并键盘录入的数据变成大写打印在控制台上。


需求2:
读取键盘录入数据,将数据变成大写,保存到一个文件中。

分析:
源:键盘,InputStream。Reader
是纯文本数据:Reader.
设备:System.in.

已经明确了使用读取字符流体系,可是设备是键盘System.in是读取字节流对象。
这时就需要将字节流转成字符流。用到了InputStreamReader.

需要高效吗?需要。Buffered

BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
Note: 键盘录入,就写这句代码!


目的:硬盘,OutputStream Writer
纯文本?yes Writer
设备:硬盘文件 FileWriter。
缓冲,yes

BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"GBK"));
这三句都是等效的。使用都是默认的编码表GBK.

另加一个需求?
想要将录入的数据按照UTF-8另一个编码表的形式进行数据的存储。
那么目的就要变化了,因为FileWriter,虽然可以作为文件目的对象,但是该对象中的编码表是默认的GBK。
当想要指定编码表时,必须要使用转换流。
BufferedWriter bufw =
BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"UTF-8"));


##############################################
#记住:凡是涉及到编码转换的操作, #
#一定要想到转换流,如果只用默认码表, #
#可是使用转换流的子类FileWriter或FileReader. #
##############################################


-----------------------------------------------------


需求3:
读取一个文本文件,将文本文件的数据展现在控制台上。
分析:
源:硬盘文件。InputStream Reader。
纯文本?yes Reader。
设备:硬盘 FileReader.
缓冲?yes BufferedReader

BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));

目的:OutputStream Writer
纯文本?yes Writer.
设备:控制台 System.out.

发现控制台的对象是System.out.是字节输出流。
因为是纯文本数据,使用Writer所以可以将字符流转成成字节串流。
使用了转换流 OutputStreamWriter

需要高效吗?需要。

BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(System.out));


---------------------------------------------------


需求4:
读取一个文本文件,将数据变成大写,存到一个文件中。

分析:
源?目的?
源:一个硬盘文件。就明确了要使用InputStream Reader
是纯文本的吗?是,就进一步明确了使用Reader.
什么设备:硬盘文件。在进一步明确了使用Reader体系中FileReader

FileReader fr = new FileReader("a.txt");

需要提高效率吗?需要!
BufferedReader bufr = new BufferedReader(fr);


目的:一个硬盘文件。使用体系 OutputStream Writer
是纯文本吗?是,使用Writer。
目的设备:硬盘文件.使用FileWriter.

FileWriter fw = new FileWriter("b.txt");

需要高效吗?需要!
BufferedWriter bufw = new BufferedWriter(fw);


*/

class TransStreamDemo2
{
public static void main(String[] args)throws IOException
{

/*
InputStream in = System.in;

//需要将字节流转成字符流。
InputStreamReader isr = new InputStreamReader(in);

//使用缓冲区的readLine
BufferedReader bufr = new BufferedReader(isr);


OutputStream out = System.out;

OutputStreamWriter osw = new OutputStreamWriter(out);


BufferedWriter bufw = new BufferedWriter(osw);
*/


BufferedReader bufr =
new BufferedReader(new InputStreamReader(new FileInputStream("LineNumberReaderDemo.java")));

BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("copyLine.txt")));

String line = null;

while((line=bufr.readLine())!=null)
{

if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();

}
bufw.close();
bufr.close();

}
}
/*

c:\abc
c:\abc\haah
c:\abc\0.mp3 "c:\abc\0.mp3"--replace("c:\abc","d:\qq\abc")->"d:\qq\abc\0.mp3"

new FileInputStream("c:\abc\0.mp3");

new FileOutputStream("d:\qq\abc\0.mp3");


d:\qq\
d:\qq\abc\haah
d:\qq\abc\0.mp3


d:\qq\
d:\qq\abc
d:\qq\abc\0.mp3

*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值