【一】IO流分为两种:字符流、字节流
字符流:Reader、Writer(常用于文件文本的读写)
字节流:InputStream、OutputStream(常用于图片、歌曲、视频等文件的读写)
【二】字符流
(1)高效读写,即带有缓冲区的BufferedReader、BufferedWriter
BufferedReader(Reader):
特有方法readLine(),若返回为null,则表示文件读取结束。
BufferedWriter(Writer):
特有方法newLine(),必须与flush()方法连用。
BufferedReader bufr=new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw=new BufferedWriter(new FileWriter("b.txt"));
String line=null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
(2)FileReader、FileWriter标准的文本文件读写流
FileReader(File):在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(String):在给定从中读取数据的文件名的情况下创建一个新 FileReader。
FileWriter(File):根据给定的 File 对象构造一个 FileWriter 对象
FileWriter(String):根据给定的文件名构造一个 FileWriter 对象。
(3)PrintWriter
PrintWriter(Wrinter):创建不带自动行刷新的新 PrintWriter。
PrintWriter(File):使用指定文件创建不具有自动行刷新的新 PrintWriter。
PrintWriter(OutputStream):根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。
PrintWriter(String):创建具有指定文件名称且不带自动行刷新的新 PrintWriter。
(4)RandomAccessFile
此类的实例支持对随机访问文件的读取和写入。该类内部封装了一个数组,而且通过指针对数组的元素进行操作。
RandomAccessFile(file,r/rw):r表示的是只读操作,rw表示的是读写操作。
如果模式为r,不会创建文件,会读取已经存在的文件,若文件不存在,就会报异常。
如果模式为rw,会自动创建文件。若文件存在,不会覆盖原有的文件。
特殊方法:
seek():改变指针的位置。
skipBytes(bytes):跳过bytes个字节进行对指针位置的调整,但是指针不能往回走。
(5)CharArrayWriter、CharArrayReader
CharArrayReader(char[] buf) :根据指定的 char 数组创建一个 CharArrayReader。
CharArrayWriter():创建一个新的 CharArrayWriter。
CharArrayReader:此类实现一个可用作字符输入流的字符缓冲区。
CharArrayWriter:此类实现一个可用作 Writer 的字符缓冲区。缓冲区会随向流中写入数据而自动增长。
可使用 toCharArray() 和 toString() 获取数据。
注:在此类上调用 close() 无效,并且在关闭该流后可以调用此类中的各个方法,而不会产生任何 IOException。
特殊方法:
append():追加输出。
(6)StringReader、StringWriter
StringReader(Reader):创建一个新字符串 reader。
StringWriter():使用默认初始字符串缓冲区大小创建一个新字符串 writer。
【三】字节流
(1)高效读写,即带有缓冲区的BufferedInputStream、BufferedOutputStream
BufferedInputStream(InputStream)
BufferedOutputStream(OutStream)
(2)FileInputStream、FileOutputStream
FileInputStream(InputStream)
FileOutputStream(OutStream)
(3)PrintStream
PrintStream(OutputStream)
printStream(File)
printStream(String)
特有方法:
print(基本数据类型)
printf(基本数据类型)
println(基本数据类型)
(4)DataInputStream、DataOutputStream
DataInputStream(InputStream)
DataOutputStream(OutputStream)
(5)ObjectInputStream、ObjectOutputStream
ObjectInputStream()
ObjectInputStream(InputStream)
ObjectOutputStream()
ObjectOutputStream(OutputStream)
(6)PipleInputStream、PipleOutputStream
PipleInputStream()
PipleOutputStream()
(7)SequenceInputStream
SequenceInputStream(Enumeration<? extends InputStream> e)
(8)ByteArrayInputStream、ByteArrayOutputStream
【四】转换流
字节流与字符流之间的桥梁:
InputStreamReader:
OutputStreamWriter:
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
String line=null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();