1.字符输入流【Reader】
java.io。Reader类:抽象类,表示用于读取字符流的所有类的超类,可以读取字符信息到内中
- public abstract void close():关闭此流并释放与此流相关联的任何系统资源
- public int read():从输入流读取一个字符,读取到末尾返回 -1
- public int read(char cbuf[]):从输入流中读取一些字符,并将他们存储到字符数组cbuf中,读取到末尾返回 -1
1.1、FileReader类
java.io.FileReader类,继承Reader类,表示字符输入流,用来读取字符对象数字
构造方法:
- public FileReader(String fileName):FileReader类对象,给定要读取的文件的名称
- public FileReader(File file):FileReader类对象,给定要读取的file文件的名称
注意:
1.当你创建一个输入流对象时,必须要传入一个文件路径
2.该路径下,如果没有文件,就会抛出FileNotFoundException
// 文件存在
FileReader fr1 = new FileReader("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt");
FileReader fr2 = new FileReader(new File("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt"));
// 文件不存在,会报异常
FileReader fr3 = new FileReader("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt");
1.2、读取单个字符数据
- public abstract void close():关闭此流并释放与此流相关联的任何系统资源
- public int read():从输入流读取一个字符,读取到末尾返回 -1
// 创建字符输入流对象
FileReader fr = new FileReader("day12_File类与递归&IO流&字符流和字节流\\\\resources\\\\a.txt");
int len;// 每次读取返回的字符数据
// 循环读取
while ((len = fr.read()) != -1){
System.out.print((char)len);
}
// 关闭流
fr.close();
1.3、读取字符数组长度的字符数据
- public abstract void close():关闭此流并释放与此流相关联的任何系统资源
- public int read(char cbuf[]):从输入流中读取一些字符,并将它们存储到字符数组cbuf中,读取到末尾返回 -1
// 创建字符输入流对象
FileReader fr = new FileReader("day12_File类与递归&IO流&字符流和字节流\\\\resources\\\\a.txt");
int len;// 每次读取返回的字符数据
char[] ch = new char[1024];
// 循环读取
while ((len = fr.read(ch)) != -1){
System.out.println(ch);
}
// 关闭流
fr.close();
2.字符输出流Writer
java.io.Writer类,抽象类,用于表示字符输出流的所有类的超类,将指定的字符信息写出到目的地
成员方法:
- public void write(int c)
- public void write(char cbuf[])
- public abstract void write(char cbuf[], int off, int len)
- public void write(String str)
- public void write(String str, int off, int len)
- public abstract void flush()
- public abstract void close()
2.1、FileWriter类
java.io.FileWriter类 是Writer的子类,表示字符输出流,可以用来写出字符数据
构造方法:
- public FileWriter(String fileName)
- public FileWriter(String fileName, boolean append)
- public FileWriter(File file)
- public FileWriter(File file, boolean append)
注意:
1.当你创建一个字符输出流对象时,必须传入一个文件路径
2.前面2个构造方法,传入的路径,如果没有这个文件,会创建这个文件,如果文件里面有数据,数据会被清空
3.后面2个构造方法,多了一个append的参数,true表示不清空,false默认清空
FileWriter fw = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt");
FileWriter fw1 = new FileWriter(new File("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt"));
FileWriter fw2 = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt",true);
FileWriter fw3 = new FileWriter(new File("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt"),true);
2.2、写单个字符
- public void write(int c)
// 第一步:创建字符输出流对象。关联目的地文件路径
FileWriter fw = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\resources\\b.txt",true);
// 第二步:写出单个字符
fw.write(97);
// 第三步:关闭流
fw.close();
2.3、写字符数组
- public void write(char cbuf[])
- public abstract void write(char cbuf[], int off, int len)
// 第一步:创建字符输出流对象。关联目的地文件路径
FileWriter fw = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\\\resources\\\\c.txt");
char[] ch = {'我','是','一','名','程','序','员'};
fw.write(ch);
// 关闭流
fw.close();
2.4、写出字符串
- public void write(String str)
- public void write(String str, int off, int len)
// 第一步:创建字符输出流对象。关联目的地文件路径
FileWriter fw = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\\\resources\\\\c.txt");
// 第二步:写出字符串
String str = "今天心情不错,又是新的一天";
//获取字符串长度
int len = str.length();
fw.write(str,0,len);
// 第三步:关闭流
fw.close();
注:字符流 只能操作文本文件,不能操作图片,视频等非文本文件
2.5、关闭与刷新
- public abstract void flush():刷新缓冲区,流对象可以继续使用
- public abstract void close():关闭流,释放系统资源,关闭流会顺带刷新缓冲区,关闭之后不可操作
// 第一步:创建字符输出流对象。关联目的地文件路径
FileWriter fw = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\\\resources\\\\d.txt");
// 第二步:写出字符串
String str = "今天天气不错";
fw.write(str);
fw.write("\n");
fw.write("这是第二行");
fw.flush();
fw.write("\n");
fw.write("这是flush之后的数据");
// 第三步:关闭流
fw.close();
// fw.write("\r\n");
// fw.write("这是第四行");