一、FileReader
1.1FileReader读入数据的基本操作
1.1.1实现步骤
- File类的实例化,指明要读取的文件。
- 提供具体的流,实例化FileReader流。
- 数据读入。
- 流的关闭操作。
1.1.2注意点
- read():返回读入的一个字符。如果达到文件末尾,返回-1。
- 异常的处理:为了保证流资源一定会被关闭,需要使用try-catch-finally来处理。
- 读入的文件一定要存在,否则会报FileNotFoundException。
@Test
public void testFileReader() {
FileReader fr = null;
try {
//1.实例化file对象,指明要操作的文件
File file = new File("hello.txt");//相较于当前module
//2.提供具体的流
fr = new FileReader(file);
//3.数据的读入
//read():返回读入的一个字符。如果达到文件末尾,返回-1
int data;
while ((data = fr.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.流的关闭操作
try {
if (fr != null) {
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
1.2FileReader中使用read(char[] cbuf)
1.2.1实现步骤
整体实现过程,同上。
1.2.2注意点
- read(char cbuf[]) :返回每次读入cbuf数组中的字符的个数。如果达到文件末尾,返回-1。
- 每次遍历cbuf[]的长度为每次read(char cbuf[])方法返回的len,而不是cbuf[]数组本身的长度。
//对read()操作升级:使用read的重载方法
@Test
public void testFileReader1() {
FileReader fr = null;
try {
//1.实例化file对象
File file = new File("hello.txt");
//2.提供具体的流
fr = new FileReader(file);
//3.数据的读入
//read(char cbuf[]) :返回每次读入cbuf数组中的字符的个数。如果达到文件末尾,返回-1。
char[] cbuffer = new char[5];
int len;
while ((len = fr.read(cbuffer)) != -1) {
//方式一:遍历数组
for (int i = 0; i < len; i++) {
System.out.print(cbuffer[i]);
}
//方式二:char数组转String
String str =new String(cbuffer,0,len);
System.out.print(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.资源的关闭
try {
if (fr != null) {
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、FileWriter
2.1FileWriter写出数据的操作
2.1.1实现步骤
- File类的实例化,指明要写出的文件。
- 提供具体的流,实例化FileWriter流。
- 数据写出。
- 流的关闭操作。
2.1.2注意点
- 输出操作,对应的File可以不存在,并不会报异常。
- File对应的文件如果不存在,在输出的过程,会自动创建文件。
- File对应的文件如果存在:
- 如果流使用的构造器是FileWriter( file , false ) / FileWriter( file ) ,对原文件的覆盖。
- 如果流使用的构造器是FileWriter( file , true),对原文件追加在末尾。
/**
* 从内存中写数据到硬盘文件里
*/
@Test
public void testFileWriter() {
FileWriter fw = null;
try {
//1.提供File类的对象,指明要导出的文件
File file = new File("hello1.txt");
//2.提供流的对象
fw = new FileWriter(file, false);
//3.导出数据
fw.write("I have a dream!\n");
fw.write("you need a dream!");
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.关闭流资源
try {
if (fw != null) {
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、使用FileReader和FileWriter实现文本文件的复制
@Test
public void testFileReaderFileWriter() {
FileReader fr = null;
FileWriter fw = null;
try {
//1.提供File类的对象,指明读入和写出的文件
File srcFile = new File("hello.txt");
File destFile = new File("hello1.txt");
//2.提供流的对象
fr = new FileReader(srcFile);
fw = new FileWriter(destFile);
//3.读入、写出数据
char[] cbuf = new char[5];
int len;
while ((len = fr.read(cbuf)) != -1) {
fw.write(cbuf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.关闭流资源
try {
if (fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fw != null)
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}