IO操作流总结_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > IO操作流总结

IO操作流总结

 2012/2/9 10:18:23  caiwb1990  程序员俱乐部  我要评论(0)
  • 摘要:importjava.io.*;/*IO流的操作规律。三个明确:1,明确源(读)和目的(写)。其实就是在明确输入流还是输出流。源:输入流InputStreamReader目的:输出流OutputStreamWriter2,明确操作的数据内容。其实就是在明确字符流还是字节流。如果数据都是纯文本数据使用字符流。如果数据是非文本数据使用字节流。前两步已经明确了使用哪一个体系。3,明确具体的设备。明确使用的具体对象。源设备:内存,键盘(System.in),硬盘(文本)(File)。目的设备:内存
  • 标签:总结 操作
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

*/



发表评论
用户名: 匿名