IO流
FileReader
-
read()的理解:返回读入的一个字符。如果文件到达末尾,返回-1
-
异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理
-
读入的文件一定要存在,否则会报FileNotFoundException。
使用read()方法
package com.yicurtain.IO;
import org.junit.Test;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReadWriteTest {
//将IOStream下的hello.txt文件内容读入程序中,并输入在控制台。
@Test
public void test(){
// 1.实例化File类的对象,指明要操作的文件
FileReader fr = null;
try {
File file = new File("hello.txt");
// 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();
}
}
}
}
? 使用read(cbuf)的方法
@Test
public void test2(){
FileReader fr = null;
try {
File file = new File("hello.txt");
// 2. 提供具体的流
fr = new FileReader(file);
// 3.数据的读入
// read(char[] cbuf):返回每次读入cbuf数组中字符的个数。如果文件到达末尾,返回-1
char[] cbuf = new char[5];
int len;
while((len=fr.read(cbuf))!=-1){
// 将字符串cbuf转换为string,从第0个位置,按长度为len的数组往里面填数据
String str = new String(cbuf,0,len);
System.out.print(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4.流的关闭操作
try {
if (fr!=null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileWrite
- 输出操作,对应的File可以不存在。并不会报异常
- File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件
- File对应的文件如果存在
- 如果流使用的构造器是FileWrite(file)或FileWrite(file,false):对原有的文件的覆盖
- 如果流使用的构造器是FileWrite(file,true):不会对原有文件覆盖,而是对原有文件追加内容
@Test
public void test3() throws IOException {
// 1.提供File类的对象,指明文件路径
File file = new File("hello1.txt");
// 2.提供FileWriter的对象,用于数据的写出
FileWriter fr = new FileWriter(file);
// 3.写出的操作
fr.write("I have a dream!!\n");
fr.write("I also need to a dream!!");
// 4.流资源的关闭
fr.close();
}
文件的复制操作
@Test
// 文件的复制操作
public void test4(){
FileReader fr1 = null;
FileWriter fr2 = null;
try {
File file1 = new File("hello.txt");
File file2 = new File("hello2.txt");
fr1 = new FileReader(file1);
fr2 = new FileWriter(file2);
char[] cbuf = new char[5];
int len;
while ((len=fr1.read(cbuf))!=-1){
fr2.write(cbuf,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fr1!=null)
fr1.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fr2!=null)
fr2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileInputStream
同FileReader
FileOutputStream
同FileWrite
结论
- 对于文本文件(.txt,.java,.c,.cpp),使用字符流(FileReader/FileWrite)处理
- 对于非文本文件(.jpg,.mp3,.mp4,.doc),使用字节流(FileInputString/FileOutputString)处理