版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/84059948
一概念
流:流动,流向,从一端流向另一端,这俩端为源头与目的地
程序与文件| 数组 | 网络连接 | 数据库 | 都是以程序为中心
IO流的分类
流向分为 :输入流 与输出流
数据分为: 字节流:以二进制的方式处理数据,可以处理一切文件,包括纯文本 ,doc ,音频,视屏等等
字符流:文本文件只能处理纯文本
字节流与字符流(重点)
字节流: 输入流 InputStream
close() |
关闭此文件输入流并释放与此流有关的所有系统资源 |
read(byte[] b) | 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 |
read(byte[] b, int off, int len) | 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 |
源头文件FileInputStream
输出流 outputStream
close() | 关闭此输出流并释放与此流有关的所有系统资源。 |
write(byte[] b) | 将 b.length 个字节从指定的 byte 数组写入此输出流。 |
write(byte[] b, int off, int len) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 |
flush() | 刷新此输出流并强制写出所有缓冲的输出字节。 |
源头文件 FileOutputStream
字符流
输入流 Reader
read(char[] cbuf) |
将字符读入数组。 |
read(char[] cbuf, int off, int len) |
将字符读入数组的某一部分。 |
close() | 关闭该流并释放与之关联的所有资源。 |
源头文件 FileReader
输出流 Writer
void close() | 关闭此流,但要先刷新它。 |
flush() | 刷新该流的缓冲。 |
write(char[] cbuf) | 写入字符数组。 |
write(char[] cbuf, int off, int len) | 写入字符数组的某一部分。 |
源头文件 FileWriter
字节流读取与写入
需求:
将a文件内容写入到b文件中 如下
public static void main(String[] args) {
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
try {
//建立连接
inputStream = new FileInputStream(new File("E:/jianli7472/a.txt"));
//创建缓冲区
byte[] bytes = new byte[1024];
//每次读取的长度
int len = 0;
while (-1 != (len = inputStream.read(bytes))) {
//append 为true 如果文件存在内容不会覆盖 默认为false 如果存在内容直接覆盖
FileOutputStream fileOutputStream = new FileOutputStream(new File("E:/jianli7472/b.txt"), true);
//输出到指定的文件 长度为 0 -len的长度
fileOutputStream.write(bytes, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}