六、JAVA IO
六、JAVA?IO
74、java中一个重要部分就是JAVA?IO。IO就像是一个湖泊里的水管一样,是湖泊同其他湖泊(江河)的中间传输通道。Java?IO?是数据通道,是内存同硬盘交互的中间者。
75、JAVA?IO中我们分为两类,一类是字符流(Reader?Writer),另一类是字节流(顾名思义,读写的是字节数据InputStream?OutputStream)。
76、我们举一个明显的字符流的例子:FileWriter.向一个磁盘文件test.txt中写入:“JAVA?IO?FileWriter?测试写入数据”。
package?com.wlh;
import?java.io.*;
?
public?class?IOTest_FileWriter?{
?
public?static?void?main(String[]?args)?throws?IOException?{
String?strPath="E:\\test.txt";?
FileWriter?fw=new?FileWriter(strPath);
fw.append("JAVA?IO?FileWriter?测试写入数据");
fw.close();
}
?
}
?
77、Writer中的flush和Close方法的区别是:flush是刷新缓冲区,数据的存需要刷新才能从内存中写入或者读取。Close是释放资源,释放前肯定存在flush操作。
78、我们看到了,我们进行IO操作时,抛出了IO异常。那么我们会思考为什么会有异常,基于以下几点设计的:是否有文件存在;是否有流可用(可关闭等)。那么我们有两种处理方式,一是将异常抛出,最终给了虚拟机,而是自己try?catch掉。我们try?catch掉的时候,我们在try?catch代码块外要定义一个流的引用。在关闭时,我们要判断流是否为null。

?
79、我们实际生活,往往需要一个存档,我们将数据存储,而不是将原有数据覆盖。我们查API文档,发现有一个构造函数public?FileWriter(String?fileName,?boolean?append)
???????????throws?IOException
给定的文件名以及指示是否附加写入数据的?boolean?值来构造?FileWriter?对象。

?6、我们需要读取硬盘上的数据:FileReader.?用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在?FileInputStream?上构造一个?InputStreamReader。?

?运行结果是:

?这时,我们发现我们无法预计数据的大小,也就无法给定合适的字符数组。于是查阅API发现,read的方法有说明,如果达到流的末尾,则返回-1。

?80、实例:复制原理及实现
我们将一个文件复制到另一个文件中,实际上是将一个文件中的内容读出来,写入另一个文件中。

?
81、字符流中为了提高流存取效率,设计了缓冲区技术。BufferedWriter与BufferedReader。
话不多说,举个简单BufferedWriter例子:

?再举一个BufferedReader的例子:

?82、下面我们开始字节流的操作
我们向记事本中写入:1,2

?我们向记事本中写入:中国好声音!

?83、读取字节流

?84、我们举一个简单的操作字节流的例子,就是我们拷贝图片。

?85、同样为了提高效率,java设计了字节流的缓冲技术:BufferedOutputStream和BufferedInputStream。例如:向文件输入:“生命如同一段旅程!”

?同样,我们读取刚才我们存储的内容:

?