JAVA—字符流(字符输入流Reader和字符输出流Writer)
文件字符输入流FileReader:
使用步骤:
1.创建FileReader对象,构造方法中绑定要读取的数据源(String类型的路径或者File对象)
2.使用FileReader的方法read读取文件,返回字符
3.释放资源,关流
一次读取一个字符
FileReader fr = new FileReader("D:\\IdeaProjects\\javaSE\\IO流\\a.txt");
int len = 0; //返回字符,读到末尾返回-1
while ((len = fr.read()) != -1){
System.out.print((char)len); //将读取到的字符进行强转
}
fr.close();
一次读取多个字符
FileReader fr = new FileReader("D:\\IdeaProjects\\javaSE\\IO流\\a.txt");
char[] chars = new char[1024]; //存储读取到的多个字符
int len = 0; //len记录的是每次读取的有效字符个数
while ((len = fr.read(chars)) != -1){
System.out.println(new String(chars,0,len)); //将字符数组转换成字符串并输出,从0开始到有效字符len
}
文件字符输出流FileWriter:
使用步骤:
1.创建FileWriter对象,构造方法中绑定要写入数据的目的地(String类型的路径或者File对象)
2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换成字节的过程)
3.使用FileWriter中的flush方法,把内存缓冲区中的数据,刷新到文件中
4.关流释放资源(关流也可把数据刷新到文件中)
FileWriter fw = new FileWriter("D:\\IdeaProjects\\javaSE\\IO\\a.txt");
fw.write(97); //写入97的字符
//fw.flush(); //将数据从内存刷新到文件中
fw.close(); //关流,关流前也把数据刷新到文件中
/*
flush和close的区别:
fulsh:刷新缓冲区,流对象可以继续使用
close:先刷新缓冲区,然后通知系统释放资源,流对象不可以再使用
*/
字符输出流写入字符数组
FileWriter fw = new FileWriter("D:\\IdeaProjects\\javaSE\\IO\\b.txt");
char[] chars = {'你', 'b', 'c', 'd'};
fw.write(chars);
fw.close();
字符输出流写入指定的字符数组
FileWriter fw = new FileWriter("D:\\IdeaProjects\\javaSE\\IO\\b.txt");
char[] chars = {'你', 'b', 'c', 'd'};
fw.write(chars,1,3); //参数1:字符数组 参数2:起始索引 参数3: 字符个数
fw.close();
字符输出流写入字符串
FileWriter fw = new FileWriter("D:\\IdeaProjects\\javaSE\\IO\\b.txt");
//写入字符串
fw.write("传智播客");
fw.write("你好啊java",2,2); 参数1:字符串 参数2:起始索引 参数3: 字符个数
fw.close();
字符输出流的续写和换行
//构造方法传入true,就是续写 传false或不传就是覆盖写
FileWriter fw = new FileWriter("D:\\IdeaProjects\\javaSE\\IO\\b.txt",true);
fw.write("黑马");
//换行 windows: \r\n Linux:/n mac /r
fw.write("黑马" + "\r\n"); //换行写
fw.write("黑马" + "\r\n");
fw.write("黑马" + "\r\n");
fw.close();