IO流可以分为输入流,输出流,输入流是读取,输出流是写入;也可以分为字节流和字符流,字节流操作的是字节数据,字符流是操作的字符数据;
字符流:
体系:Writer
|----OutputStreamWriter
|----FileWriter
|----BufferedWriter
Witer是输出流。是一个抽象类,里面不仅有抽象方法,也有非抽象方法,他们是一些共性方法。
OutputStreamWiter 是Writer的实现类,使用这个类时,我们可以指定编码集。但是我们常用的是:FileWriter,它继承了OutputStreamWriter。里面没有什么特别的方法。
BufferedWriter 是带缓冲区的,这里使用了装饰模式。里面封装了一个特别的方法。newLine() 方法,作用就是换行。在Windows下 相当于 "\r" "\n"两个字符。而在Linux下就是相当于"\n"。
注1:使用IO流我们一定要处理IOException而不是抛出这个异常,并且在finally块中 关闭输出流。
注2:在使用BufferedWriter时,我们要使用flush() 方法,将缓冲区的内容写到指定位置。
注3:在Windows下,目录是使用"\"分割,但是在Java中这个是特殊符号,我们需要转义写成"\\",例如:FileWriter fw=new FileWriter("c:\\aaa\\test.txt");
注4:我们在使用FileWriter 创建对象时,如果指定位置已经有重名文件存在,会将该文件覆盖。里面的内容只有我们当时写入的东西。如果我们想要在该文件后面接着写入,此时我们需要使用
FileWriter(String fileName,boolean append) 构造函数来创建对象。例如:FileWriter fw=new FileWriter("d:\\javatest\\iodemo.txt",true);
Reader
|----InputStreamReader
|----FileReader
|----BufferedReader
Reader是输入流,也是抽象类,里面不仅有抽象方法,也有非抽象方法。。。。
。。。。和Writer相似。。。
BufferedReader 中有一个特殊的方法,readLine() 方法,作用是读取一行数据,但是不包含终止符。它的原理就是在Windows下读取到"\r\n"两个字符时,判定一行数据读取完毕。
在Linux下,读取到"\n"时,判定一行数据读取完毕。
注1:在Reader类及FileReader类中的读取方法read() 返回值是int类型,当读取已经已经到末尾时,返回 -1;只有BufferedReader中的特殊的读取方法readLine() ,返回类型是String,
当读取完毕时返回null。