一、IO概念与分类
1. 概念
- I:input,输入,读取,把硬盘中的数据,读取到内存中使用
- O:output:输出,写入,把内存中的数据,读取到硬盘中保存
- 流:数据(字符,字节),1个字符=2个字节,1个字节=8个二进制位
2. 分类
IO流 | 输入流 | 输出流 |
---|
字节流 | InputStream | OutputStream |
字符流 | Reader | Writer |
二、OutputStream
1. 子类
子类 | 作用 |
---|
ByteArrayOutputStream | 往字节数组中写数据 |
FileOutputStream | 往文件中写数据 |
FilterOutputStream | 带过滤器的字节输出流 |
ObjectOutputStream | 写入对象 |
PiplineOutputStream | 管道流 |
2. 子类共性方法
方法 | 作用 | 参数 |
---|
close() | 关闭输出流并施放与此流有关的所有系统资源 | |
flush() | 刷新此输出流并强制写出所有缓冲的输出字节 | |
write(byte[ ] b) | 将b.length个字节从指定的byte数组写入此输出流 | |
write(byte[ ] b, int off, int len) | 将指定byte数组从偏移量off开始的len个字节写入此输出流 | off代表从byte数组的第几个索引开始写,len代表写几个 |
write(int b) | 将指定的字节写入此输出流 | |
三、FileOutputStream
1. 作用
- FileOutputStream是OutputStream的子类
- 用于向文件中写入数据
2. 单次写入
方法 | 参数 | 作用 |
---|
FileOutputStream(String name) | name:文件路径 | 创建一个FileOutputStream对象,若文件没有则会创建 |
FileOutputStream(File file) | file:文件 | 创建一个FileOutputStream对象,若文件没有则会创建 |
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class DemoOutputStream {
public static void main(String[] args) throws IOException {
// 写入单个byte数据
FileOutputStream fos = new FileOutputStream("a.txt");
fos.write(97); // 写入byte字节流,97对应的字符为“a”
fos.close();
// 写入byte数组
FileOutputStream fos2 = new FileOutputStream(new File("b.txt"));
byte[] b2 = {65, 66, 67, 68, 69}; // 编写byte数组
fos2.write(b2); // ABCDE
fos2.close();
// 写入byte数组,指定写入的偏移量
FileOutputStream fos3 = new FileOutputStream(new File("c.txt"));
byte[] b3 = {65, 66, 67, 68, 69};
fos3.write(b3, 1, 2); // 从第1个索引开始写,写2个,结果为BC
fos3.close();
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class DemoOutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream fos4 = new FileOutputStream(new File("d.txt"));
byte[] bytes = "你好".getBytes(); // 字符串转换为byte数组
fos4.write(bytes);
fos4.close();
}
}
3. 数据追加
方法 | 参数 |
---|
FileOutputStream(String name, boolean append) | append为追加的开关,当为true时,继续在末尾追加;如果为false,则会覆盖源文件 |
FileOutputStream(File file, boolean append) | 同上 |
import java.io.FileOutputStream;
import java.io.IOException;
public class DemoOutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("a.txt");
fos.write(97); // 写入byte字节流
fos.close();
FileOutputStream fos2 = new FileOutputStream("a.txt", true);
fos2.write(98);
fos2.close(); // ab
}
}
4. 换行写入
系统 | 符号 |
---|
window | \r\n |
linux | /n |
mac | /r |
import java.io.FileOutputStream;
import java.io.IOException;
public class DemoOutputStream {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("a.txt");
for (int i = 1; i < 10; i++) {
fos.write("你好".getBytes());
fos.write("\r\n".getBytes()); // 换行
}
fos.close();
}
}
四、InputStream
1. 子类
子类 | 作用 |
---|
AudioInputStream | 读取音频 |
ByteArrayInputStream | 读取字节数组 |
FileInputStream | 读取字节数组 |
FilterInputStream | 过滤读取 |
ObjectInputStream | 读取对象 |
PiplineInputStream | 读取管道流 |
SequenceInputStream | 读取队列 |
StringBufferInputStream | 读取字符串缓冲区 |
2. 子类共性方法
方法 | 作用 |
---|
close() | 关闭输入流并释放与该流关联的所有系统资源 |
read() | 一次读取一个字节,返回字节,读取完毕返回-1 |
read(byte[ ] b) | 读取一定数量的字节,并将其存储在缓冲区数组 b 中,读取完毕返回-1 |
五、FileInputStream
1. 作用
- FileInputStream是InputStream的子类
- 用于从文件中读取数据
2. 读取方法
方法 | 参数 |
---|
FileInputStream(String name) | 数据源的路径 |
FileInputStream(File file) | 数据源的文件 |
import java.io.FileInputStream;
import java.io.IOException;
public class DemoFile {
public static void main(String[] args) throws IOException {
// 一次读取一个字节
FileInputStream fis = new FileInputStream("a.txt");
int len; // 记录读取到的字节
while ((len = fis.read())!= -1){
System.out.println(len);
}
fis.close();
// 一次读取多个字节
FileInputStream fis2 = new FileInputStream("a.txt"); // 原文件内容为abcde
byte[] bytes = new byte[1024]; // 定义一次读取2个字节
int len2; // 记录读取的有效字节个数
while((len2 = fis2.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len2));
}
fis2.close();
}
}