FileReader读取数据的基本操作
其实我们的所有的流对数据的读写操作都是大致相同的
- 只是一些细节可能有一些差异
- 注意: 我们要读取的文件一定要存在,如果我们要读取的文件不存在,这个时候就会出现FileNotFoundexception
FileReader(字符输入流)读取数据的步骤:
- 首先我们要实例化一个File类的对象 --> 指明要操作的文件
- 然后我们要提供具体的流对象(这里我们就是创建一个FileReader类的对象) --> 让这个流对象拿到我们的文件的操作权
- 这个时候我们提供具体的流对象时要求这个流对象的终点一定要在硬盘中实际存在,如果不存在就会出现一个编译器异常(FileNotFoundException(找不到文件异常));
- 使用流对象调用read()方法进行数据的读入
- 在FileReader类中的read()方法一次读取一个字符,因为FileReader是字符流,读取数据的基本单位是字符
- 但是我们还提供了一些read()方法的重载方法,可以一次读取多个字符到一个数组中
- 在FileReader类中的read()方法一次读取一个字符,因为FileReader是字符流,读取数据的基本单位是字符
- 流的关闭操作
eg: ----这里我们通过一个例子来理解FileReader(字符输入流)读取数据的基本操作
package IO流.FileReader.读取数据;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.File;
import java.io.IOException;
public class Demo1 {
/*
在这个程序中我们使用了将异常抛出的方式处理异常,但是这个时候我们在涉及到文件的读取操作的时候我们都是要使用
try --- catch --- finally的方式来处理异常,因为我们要涉及到关闭流的操作,如果我们创建了流对象之后子在对流对象
进行操作的过程中,如果这个时候出现了异常,这个时候程序就会从这里终止运行,这个时候我们的流对象就没有关闭,对应的资源
就没有释放,所以我们在涉及到文件的读写的时候(也就是在IO流中)我们一般都是使用 try -- catch --finally的方式来
处理异常的,我们将我们的流关闭的操作放到我们的finally代码块中
*/
public static void main(String[] args) throws IOException{
//1.我们先创建了一个File类型的对象
File file = new File("hi.txt");
//2.提供了一个具体的流对象,这个流对象的终点就是我们创建的file对象对应的内存中的位置
FileReader fileReader = new FileReader(file);
//3.数据的读入
int num = 0;
while((num = fileReader.read()) != -1){
//这个时候我们的这个文件中都是存储的英文字母,一个英文字母在Unicode字符集中占一个字节,所以这个时候每一个字节就一转化
System.out.println((char)num);
}
//关闭流
fileReader.close();
}
}
- 在这个程序中我们使用了将异常抛出的方式处理异常,但是这个时候我们在涉及到文件的读取操作的时候我们都是要使用
try — catch — finally的方式来处理异常,因为我们要涉及到关闭流的操作,如果我们创建了流对象之后子在对流对象
进行操作的过程中,如果这个时候出现了异常,这个时候程序就会从这里终止运行,这个时候我们的流对象就没有关闭,对应的资源
就没有释放,所以我们在涉及到文件的读写的时候(也就是在IO流中)我们一般都是使用 try – catch --finally的方式来
处理异常的,我们将我们的流关闭的操作放到我们的finally代码块中- 这里我们在使用try ---- catch ---- finally结构的时候要注意: 我们在try结构中声明的变量出了try结构之后就不能使用了 — 如果我们一个变量要在try结构中使用,出了try结构之后也要使用,这个时候我们就将这个变量声明在try结构之外,这个时候try结构之中和try结构之中都可以使用这个变量
数据库连接 ,输入输出流,socket连接等都是物理连接,jvm垃圾回收机制无法对之处理
- 也即是垃圾回收机制不会回收这些物理连接的资源,这个时候就要我们手动的关闭这些资源