FileReader&FileWriter用法示例
使用FileReader读取文本文件内容
使用Throws方式
void test1() throws IOException {
File file = new File("dir/1.txt");
if (!file.exists()) {
throw new IOException("File not found");
}
FileReader fileReader = new FileReader(file);
int data = 0;
while ((data = fileReader.read()) > -1) {
System.out.print((char) data);
}
fileReader.close();
}
使用try……catch……方法
void test2 ()
{
FileReader fileReader = null;
try {
fileReader = new FileReader("dir/1.txt");
int data;
while ((data = fileReader.read()) > -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
一次只读入一个字符效率太低,我们来一次读入多个字符。
void test3 ()
{
FileReader fileReader = null;
try {
fileReader = new FileReader("dir/1.txt");
char[] datas = new char[1024];
int num;
while ((num = fileReader.read(datas)) > -1) {
// 方式一:
// for (int i=0; i<num; i++) {
// System.out.print(datas[i]);
// }
// 方式二
String str = new String(datas, 0, num);
System.out.print(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用FileWriter向文件写内容
使用FileWriter操作一个文本文件时,若该文件不存在,则会创建该文件。
void test4 ()
{
FileWriter fileWriter = null;
try {
// 使用覆盖方式写入文件
// fileWriter = new FileWriter("dir/2.txt");
// 追加方式写入
fileWriter = new FileWriter("dir/2.txt", true);
fileWriter.append('h'); // 写入字符
fileWriter.append("ello"); // 写入字符串
fileWriter.append(" java.\n"); // 写入字符串
fileWriter.append("hello c++\n"); // 写入字符串
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
try-with-resources
上述的代码中关闭资源太过繁琐,这个问题我们用jdk7的新特性:try-with-resources来修改下
try (FileWriter fileWriter = new FileWriter("dir/2.txt", true)){
fileWriter.append('h'); // 写入字符
fileWriter.append("ello"); // 写入字符串
fileWriter.append(" java.\n"); // 写入字符串
fileWriter.append("hello c++\n"); // 写入字符串
} catch (IOException e) {
e.printStackTrace();
}
写在try括号里的资源会被自动关闭,所以就不用写finally了。
练习
使用FileReader以及FileWriter完成文本文件复制的功能。
@Test
void test6 ()
{
try (
FileReader fileReader = new FileReader("dir/1.txt");
FileWriter fileWriter = new FileWriter("dir/3.txt");
) {
char[] chars = new char[1024];
int len;
while ((len = fileReader.read(chars)) > -1) {
fileWriter.write(chars, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}