(1)文件字符输入流 Reader FileReader
public class FileReaderTest1 {
public static void main(String[] args) {
try {
// 1. 创建一个文件字符输入流管道与源文件接通
Reader fr = new FileReader("io-app2\\src\\a01.txt");
// 2. 读取文本文件的内容
int c; // 记住单次读取的字符编号
while ((c = fr.read()) != -1) {
System.out.print((char) c);
}
// 3. 每次读取多个字符
char[] buffer = new char[3];
int len; // 记住每次读取了多少个字符
while ((len = fr.read(buffer)) != -1) {
// 将读取的字符输出
System.out.print(new String(buffer, 0, len));
}
// 关闭文件流
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)文件字符输出流 Writer FileWriter
public class FileWriterTest {
public static void main(String[] args) {
try {
// 0. 创建一个文件字符输出流管道与目标文件接通。
// 覆盖管道
// Writer fw = new FileWriter("io-app2/src/itheima02out.txt");
// 追加数据的管道
Writer fw = new FileWriter("io-app2/src/a02out.txt", true);
// 1. public void write(int c): 写一个字符出去
fw.write('a');
fw.write(97);
fw.write('示'); // 写三个字符出去
fw.write("\r\n"); // 换行
// 2. public void write(String c): 写一个字符串出去
fw.write("我爱你中国abc");
fw.write("\r\n");
// 3. public void write(String c, int pos, int len): 写字符串的一部分出去
fw.write("我爱你中国abc", 0, 5);
fw.write("\r\n");
// 4. public void write(char[] buffer): 写一个字符数组出去
char[] buffer = {'安', '好', '世', '界', 'a', 'b', 'c'};
fw.write(buffer);
fw.write("\r\n");
// 5. public void write(char[] buffer, int pos, int len): 写字符数组的一部分
char[] buffer = {'安', '好', '世', '界', 'a', 'b', 'c'};
fw.write(buffer, 0, 2);
// 关闭文件流
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符输出流的注意事项:
字符输出流写出数据后,必须刷新流(flush),或者关闭流(包含刷新操作),写出的数据才有效。
这是因为写的数据先放进缓冲区,等通道关闭之后再写进文件。可以节省资源。缓冲区装满会自动刷新。