IO流3、IO流_节点流_字符流的使用
文件流——字符流的使用
一、读取
read():
//将hello.txt文件内容读入程序中,并输出到控制台
@Test
public void testFileReader() {
FileReader fileReader = null;
try {
//1、实例化File类的对象,指明要操作的文件
File file = new File("hello.txt");
//2、提供具体的流
fileReader = new FileReader(file);
//3、数据的读入
//read():返回读入的一个字符,如果达到文件末尾,返回-1
int data = fileReader.read();
while (data != -1){
System.out.print((char) data);
data = fileReader.read();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4、流的关闭操作
try {
if (fileReader != null)
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
说明点:
- read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1
- 异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理
- 读入的文件一定要存在,否则会报FileNotFoundException
read(char[] cbuf):
//对read()操作升级:使用read的重载方法
@Test
public void testFileReader1() {
FileReader fileReader = null;
try {
//1、File类的实例化
File file = new File("hello.txt");
//2、FileReader流的实例化
fileReader = new FileReader(file);
//3、读入的操作
//read(char[] cbuf):返回每次读入cbuf数组中的字符的个数。如果达到文件末尾,返回-1
char[] cbuf = new char[5];
int len;
while ((len = fileReader.read(cbuf)) != -1) {
//方式一:
for (int i = 0; i < len; i++) {
System.out.print(cbuf[i]);
}
//方式二:
// String str = new String(cbuf, 0, len);
// System.out.print(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4、资源的关闭
try {
if (fileReader != null){
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、写出
//从内存中写出数据到硬盘的文件里
@Test
public void testFileWriter() throws IOException {
//1、提供File类的对象,指明写出到的文件
File file = new File("hello1.txt");
//2、提供FileWriter的对象,用于数据的写出
FileWriter fileWriter = new FileWriter(file);
//3、写出的操作
fileWriter.write("I hava a dream\n");
fileWriter.write("You too!");
//4、流资源的关闭
fileWriter.close();
}
说明点:
- 输出操作,对应的File可以不存在的,并不会报异常
- File中的文件如果不存在,在输出的过程中,会自动创建此文件
- File中的文件如果存在:
- 若流构造器使用的是 FileWriter(file, false) / FileWriter(file):对原有文件的覆盖
- 若流构造器使用的是 FileWriter(file, true):不会对原有文件覆盖,而是在原有文件基础上追加内容
三、用FileReader和FileWriter实现文本文件的复制
//文本文件的复制
@Test
public void testFileReaderFileWriter() {
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
//1、创建File类的对象,指明读入和写出的文件
File srcFile = new File("hello.txt");
File destFile = new File("hello2.txt");
//2、创建输入流和输出流的对象
fileReader = new FileReader(srcFile);
fileWriter = new FileWriter(destFile);
//3、数据的读入和写出操作
char[] cbuf = new char[5];
int len; //记录每次读入到cbuf数组中字符的个数
while ((len = fileReader.read(cbuf)) != -1){
//每次写出len个字符
fileWriter.write(cbuf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//4、关闭资源流
try {
if (fileReader != null)
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fileWriter != null)
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
!不能使用字符流来处理图片文件!

浙公网安备 33010602011771号