字节流的父类: InputStream / OutputStream
字符流的父类: Reader / Writer
字节流的普通子类: FileInputStream / FileOutputStream
字符流的普通子类: FileReader / FileWriter
带缓冲区的字节流: BufferedInputStream / BufferedOutputStream
带缓冲区的字符流: BufferedReader / PrintWriter(打印流)
转换流: OutputStreamWriter / InputStreamReader
字符流
一、写数据:
1、FileWriter:
1.1、构造方法
```JAVA
FileWriter(String filename)
eg: FileWriter fw = new FileWriter("d://a.txt");在D盘的目录上创建名为a的txt文件。
FileWriter(String filename, boolean append)
eg:`FileWriter fw = new FileWriter(“d://a.txt”, true);``在D盘的目录上创建名为a且可追加写入的txt文件。
1.2、 成员方法
1.2.1、写入write()
void write(String str):写一个字符串
void write(String str, int index, int length):写一部分的字符串
void write(int ch):写一个字符,既可以是char类型,也可以是char类型对应的int类型(‘a’ <-> 9)
void write(char[] chs):写一个字符数组
void write(char[] chs, int index, int len):写一部分的字符数组中的字符
1.2.2、刷新flush()
fw.close():刷新缓冲区后,再通知系统释放与该文件相关的资源
1.2.3、关闭close()
fw.close():刷新缓冲区后,再通知系统释放与该文件相关的资源
二、读数据
2、FileReader
2.1、构造方法
fw.close():刷新缓冲区后,再通知系统释放与该文件相关的资源
2.2、成员方法
2.2.1、读取read()
int read()
eg:int ch = fr.read()每次读取一个字符,当ch == -1时,表示没有数据可供读取了
int read(char[] cbuf)一次读取一个字符数组的数据,返回的是实际读取的字符个数,若返回值为-1,则表示数据已读完,没有新的数据可供读取。
eg:FileReader fr = new FileReader("a.txt");//不加盘符默认为当前java文件根目录文件夹
char[] chs = new char[1024];//设置读取字符串的长度,默认最好为1024
int len;
while((len = fr.read(chs)) != -1){
System.out.print(new String(chs, 0, len));//将读取的字符数组以字符串形式输出
2.2.2、关闭close()
fw.close():刷新缓冲区后,再通知系统释放与该文件相关的资源
三、缓冲流
3、BufferedWriter与BufferedReader
缓冲流,也叫⾼效流,是对基本的 FileXxx 流的增强, 缓冲流的基本原理,是在创建流对象时,会创建⼀个内置的默认⼤⼩的缓冲区数组,通过缓冲区读写,减少系统IO次数,从⽽提⾼读写的效率。
缓冲字节流
BufferedInputStream extends InputStream BufferedOutputStream extends OutputStream flush() close() 方法不变 read*2 write*3 FileInputStream -> 套起来 就变成 BufferedInputStream FileOutputStream -> 套起来 就变成 BufferedOutputStream
eg:
FileReader fr = new FileReader("bb/aa.txt");
BufferedReader br = new BufferedReader(fr);
//BufferedWriter构造方法于其相同
3.2、成员方法
3.2.1、flush() close() read() write() 同上
3.2.2 特有方法
字符缓冲流的基本⽅法与普通字符流调⽤⽅式⼀致,不再阐述,我们来看它们具备的特有⽅法。
BufferedReader: public String readLine() :读⼀⾏⽂字。 BufferedWriter: public void newLine() :写⼀⾏⾏分隔符,由系统属性定义符号。
eg:
//readLine ⽅法演示,代码如下:
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
// 创建流对象
BufferedReader br = new BufferedReader(new FileReader("in.txt"));
// 定义字符串,保存读取的⼀⾏⽂字
String line = null;
// 循环读取,读取到最后返回null
while ((line = br.readLine()) != null) {
System.out.print(line);
System.out.println("------");
}
// 释放资源
br.close();
}
}
//newLine ⽅法演示,代码如下:
public class BufferedWriterDemo throws IOException {
public static void main(String[] args) throws IOException {
// 创建流对象
BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"));
// 写出数据
bw.write("Java");
// 写出换⾏
bw.newLine();
bw.write("程序");
bw.newLine();
bw.write("员");
bw.newLine();
// 释放资源
bw.close();
}
}
输出效果:
Java
程序
员