IO
IO流
io是java中实现输入输出的基础,它可以很方便的完成数据的输入输出操作;
input
output
流的分类
输入流与输出流
输入流:只能从其中读取数据,却不能像里面写入数据;
输出流:只能向里面写入数据,去不能读取数据;
特点:流是单向的。
字节流
字节流操作的最小数据单元是8位字节,主要由InputStream、OutputStream作为基类。
读取内容:
- 一次读取一个字节
// 1. 创建输入流对象
FileInputStream fr = new FileInputStream("1.txt")
// 2. 读取内容,直接采用循环
while(true) {
int read = fr.read();
if(read == -1) {
break;
}
System.out.println(read);
}
- 一次读取多个字节
// 1. 创建输入流对象
FileInputStream fr = new FileInputStream(new File("1.txt"));
// 2. 一次读取多个字节
byte[] arr = new byte[2];
//采用循环
while(true) {
int n = fr.read(arr);
if(n == -1) {
break;
}
System.out.println(Arrays.toString(arr));
}
- 输出流例子:
// 1.创建了输出流
FileOutputStream fo = new FileOutputStream("2.txt");
// 2. 向输出流写入内容
fo.write(97);
fo.write(98);
fo.write(99);
//3.刷流
fo.flush();
// 4. 关闭输出流
fo.close();
字符流
字符流操作的最小数据单元是16位字节,主要由Reader与Writer作为基类。
public static void main(String[] args) throws IOException {
// 1. 将字节流转换为字符流
FileInputStream fr = new FileInputStream("1.txt");
//文件编码需要一致
InputStreamReader re= new InputStreamReader(fr, "utf-8");
// 2. 读取
while(true) {
char[] arr = new char[1024];
int len = re.read(arr);
if(len == -1) {
break;
}
System.out.println(Arrays.toString(arr));
}
// 3. 关闭, 只需要关闭外层的流, 内部会帮我们关掉内层的流
reader.close();
}
字节输入流InputStream和字符输入流Reader
InputStream和Reader是所有输入流的基类,他们都是2个抽象类,本身并不能创建实例来执行输入,但他们有输入流的模版,所以它们的方法是所有的输入流和输出流可以用的方法。
在InputStream里常用的方法:
int read(): 从输入流中读取单个自己
int read(byte[] b): 从输入流中读取最多b.length个字节,将读取的字节存在数组b中,返回实际读取的字节数
int read(byte[] b, int off, int len): 从输入流中读取最多len个字节数据,并将其存储在数字b中,放入b数组中时,并不是从数组起点开始,而是从off位置开始,返回实际读取字节数。
在Reader里经常使用的方法:
int read(): 从输入流中读取单个字符
int read(char[] c): 从输入流读取最多c.length个字符数据,并将其存储在字符数组c中,返回实际读取的字符
int read(char[] c, int off, int len): 从输入流中读取最多len个字符的数据,将读取的数据放到字符数组c中保存,从数组的off开始读取。
OutputStream字节输出流和Writer字符输出流
具有以下方法:
void write(int c): 指定的字节、字符输出到输出流中
void write(byte[]/char[] buf): 将字节数组/字符数组中的数据传输到指定输出流中
void write(byte[]/char[] buf, int off,int len):将指定数组中的数据输出到指定输出流中
字符输出流还有以下方法:
void write(String s):将指定字符串输出到指定输出流中
void write(String s, int off, int len):将字节数组、字符数组中从off位置开始,长度为len的字节、字符输出到输出流中。