- Java的IO是通过java.io包下的类和接口来支持,在java.io包下主要包括输出/输出两种IO流,每种输入输出流又可以分为字节流和字符流两大类来处理输入、输出操作
- Windows的路径分隔符使用反斜线(\),而java的\代表转义字符,所以如果需要在Windows的路径下包括反斜线,则应该使用两条反斜线,如F:\abc\test.txt,或者直接用/
输入输出流
- Java的输入流主要由InputStream和Reader作为基类,输出流则由OutputStream和Writer作为基类。他们都是一些抽象类
字节流和字符流
- 字节流和字符流的用法几乎一样,区别在于字节流和字符流所操作的单元不同—字节流是数据单元是8位的字节,字符流操作的数据单元是16位的字符。
IputStream、Reader提供的方法
两个方法都一样,区别在于数据单元不一
- int read():从输出流读取单个字节/字符,返回所读取字节/字符的数据
- int read(byte[]/char[] b):从输入流中最多读取b.length个字节/字符的数据,并将其存储在b中,返回实际读取的字节/字符数。
- int read (byte[]/char[] b,int off,int len):off代表读取数据的开端,len代表从数据流中最多读取len个字符/字节的数据
OutputStream、Writer提供的方法
- int wirter(int c):把指定数据输出到输出流中,返回所读取字节/字符的数据
- int wirter(byte[]/char[] b):将字节、字符数组的数据输出到输出流中。
- int wirter (byte[]/char[] b,int off,int len):off代表读取数据的开端,len代表从数据流中最多输出len个字符/字节的数据
常用BuffereReader/BuffereWriter ,里面有方法readLine(),可以一次读取一行内容
转换流
输入、输出流体系还提供了两个转换流,这两个转换流用于实现将字节流转换成字符流,其中InputStreamReader是将字节输入流转换成字符输入流,OutputStreamWriter 将字节输出流转换成字符输出流,Java只有字节转字符,因为字节比字符使用的范围更加广大,已经是字符就不需要再转回字节了。
推回输入流
- PushbackInputStream/PushbackReader 提供方法如下:
void unread(byte[]/char[] buf ): 将一个字节/字符数组推回缓冲区里,从而允许重复读取刚刚读取的数据。
void unread(byte[]/char[] buf , int off,int len):将一个字节/字符数组从off开始,长度为len字节/字符数组推回缓冲区里,从而允许 重复读取刚刚读取的数据。
void unread(int b):将一个字节/字符退回带缓冲区里,从而允许重复读取刚刚读取的内容。
重定向标准输入/输出
在System类中有三个方法:
- static void setErr(printStream err): 重定向“标准”错误输出流。
- static void setIn(InputStream in):重定向“标准”输入流。
- static void setOut(printStream out): 重定向“标准”输出流。
例如:Systeam.out.println()是输出到屏幕的,可以通过重定义输出到文件上。