为了方便记忆,特将IO中涉及的类进行整理如下:
1、File类
提供了目录操作,查看文件属性等。
2、java IO类层次
面向字节流的类为InputStream、OutputStream;面向字符流的类为Reader、Writer
可以使用 InputStreamReader 将 InputStream-->Reader
可以使用OutputStreamWriter 将 OutputStream-->Writer
InputStream --->Reader
|---ByteArrayInputStream --->CharArrayReader
|---StringBufferInputStream(discard) --->StringReader
|---FileInputStream --->FileReader
|---PipedInputStream --->PipedReader
|---FilterInputStream
|---DataInputStream
|---BufferedInputStream --->BufferedReader(has readLine function)
OutputStream --->Writer
|---ByteArrayOutputStream --->CharArrayWriter
|---FileOutputStream --->FileWriter
|---PipedOutputStream --->PipedWriter
|---FilterOutputStream
|---DataOutputStream
|---PrintStream --->PrintWriter
|---BufferedOutputStream --->BufferedWriter
2、一些常用的组合
BufferedReader s = new BufferedReader(new FileReader(fileName)); //字符缓冲方式读取
DataInputStream di = new DataInputStream(new BufferedInputStream(new FileInputStream(filename))); //从文件缓冲读取数据类型
DataOutputStream outputStream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename))); //将数据类型写入到文件之中,然后可以通过DataInputStream来读取
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filename))); //将文件通过PrintWriter方式格式化写入
out.println 函数就可以格式化写文件内容了。
3、RandomAccessFile类
支持搜寻方法的文件读写类,提供给了seek函数
4、标准IO
System.err, System.out 都已经被包装成了 PrintStream 因此可以直接使用。
System.in 还是属于 InputStream 类型,因此在使用前需要包装下。
1)按行读取:BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ///使用了InputStreamReader将System.in表示的InputStream类型转换成Reader类型。
2)将System.out转换成PrintWriter:PrintWriter pw = new PrintWriter(System.out,true);
5、重定向IO
setIn(InputStream)
setOut(PrintStream)
setErr(PrintStream)