1.FileReader/FileWriter的使用:
1.1 FileReader的使用
1.read的理解:返回读入的一个字符,如果达到文件末尾,返回-1
2.异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理
3.读入的文件一定要存在,否则报异常
FileReader f1 = new FileReader(new File("文件路径"));
FileReader f2 = new FileReader("文件路径"); // 这种写法也可以
char chars = new chars[100]; // 一次读取的字符数量
int len = f1.read(chars) // 一次读取的字节数量放到一个整数里,可以防止少读或多读
1.2 FileWriter
从内存中写出数据到硬盘的文件里。
说明:
1. 输出操作,对应的File文件可以不存在,并不会报异常
2. File对应的硬盘中的文件如果存在:
如果流的构造器使用的是:FileInputStream(file,false) / FileWriter(file):对原文件的覆盖
如果流的构造器使用的是:FileInputStream(file,true):不会覆盖原文件,而是在原文件的基础上追加内容
2.FileInputStream / FileOutputStream的使用:
1.对于文本文件(.txt,.java,.cpp),使用字符流进行处理
2.对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt),使用字节流进行处理
下图是对非文本文件的一个处理
public class InputStreamTest {
@Test
public void InputStreamReaderTest() {
FileInputStream f1 = null;
FileOutputStream f2 = null;
try {
File file1 = new File("that.png");
File file2 = new File("this.png");
f1 = new FileInputStream(file1);
f2 = new FileOutputStream(file2);
byte[] bytes = new byte[1024];
int len;
while ((len = f1.read(bytes)) != -1){
f2.write(bytes,0,len);
}
System.out.println("复制完成");
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (f1 != null) {
try {
f1.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (f2 != null) {
try {
f2.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}
【注意】
相对路径下,IDEA和Eclipse中使用的区别
IDEA:
如果使用单元测试,相对路径是基于当前Module的
如果使用main()测试,相对路径是基于当前Project的
Eclipse:
单元测试方法还是main方法,都是基于当前Project的