9 IO流
程序员文章站
2022-07-14 11:11:09
...
IO流
概述
-
主要是把程序中的数据和磁盘里的数据进行交互。
-
in:从磁盘里读取数据到程序里。
-
out:从程序中写书数据到磁盘里。
-
分为字符流和字节流
-
字符流:只能操作字符文件**.txt**。
-
字节流:可以操作任何数据。
-
流的概念
数据的读写抽象成数据,在管道中流动。
- 流只能单方向流动。
- 输入流用来读取in
- 输出流用来写出out
- 数据只能从头到尾顺序的读写一次。
File文件流
概述
封装一个磁盘路径字符串,可以是文件路径、文件夹路径、不存在的路径。
创建对象
new File(String str)
常用方法
文件、文件夹属性
方法 | 用处 |
---|---|
length() | 文件的字节量 |
exists() | 是否存在 |
ifFile() | 是否为文件 |
isDirectory() | 是否为文件夹 |
getName() | 获取文件名、文件夹名 |
getParent() | 获取父文件夹的路径 |
getAbsolutePath() | 获取绝对路径 |
创建、删除
方法 | 用处 |
---|---|
createNewFile() | 新建文件,已经存在返回false |
mkdirs() | 新建多层不存在的文件夹 |
mkdir() | 新建一个不存在的文件夹 |
delete() | 删除文件、文件夹 |
文件夹列表
方法 | 用处 |
---|---|
list() | 返回String[] ,包含文件名 |
listFiles() | 返回File[] ,包含文件对象 |
递归删除文件夹
public static void main(String[] args) {
File f = new File("D:\\TEDU\\Desktop\\Test");
method1(f);
System.out.println("success");
}
private static void method1(File f) {
File[] fs = f.listFiles();
// 刪除文件
for (int i = 0; i < fs.length; i++) {
if (fs[i].isFile()) {
fs[i].delete();
} else if (fs[i].isDirectory()) {
if (!fs[i].delete()) {
method1(fs[i]);
}
fs[i].delete();
}
}
f.delete();
}
字节流
概述
专门用来读写 数据的,而且是各种类型 的数据. 被底层的一些工具类大量的使用.
继承结构
-
读取
- InputStream – 父类是一个抽象类,不能new,只学习共性方法
- FileInputStream – 子类学习怎么new,方法都是继承来的
- BufferedInputStream – 子类学习怎么new,方法都是继承来的
- InputStream – 父类是一个抽象类,不能new,只学习共性方法
-
写出
- OutputStream – 父类是一个抽象类,不能new,只学习共性方法
- FileOutputStream – 子类学习怎么new,方法都是继承来的
- BufferedOutputStream – 子类学习怎么new,方法都是继承来的
- OutputStream – 父类是一个抽象类,不能new,只学习共性方法
字节流读取
InputStream父抽象类
是一个抽象类,不能new,只学习共性方法
常用方法
abstract int read()
//从输入流中读取数据的下一个字节。
int read(byte[] b)
//从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
int read(byte[] b, int off, int len)
//将输入流中最多 len 个数据字节读入 byte 数组从off开始。
void close()
//关闭此输入流并释放与该流关联的所有系统资源。
FileInputStream子类
new FileInputStream(File f);
new FileInputStream(String path);
BufferedInputStream子类
- 缓冲流、处理流,目的是提高程序读取和写出的性能。
- 先将数据缓存到char[],然后一起读取出来(默认8192个字符写入一次)
new BufferedInputStream(InputStream in)//用普通输入流创建对象
字节流写出
OutputStream父抽象类
是一个抽象类,不能new,只学习共性方法
常用方法
void close()
//刷出去+关闭此输出流并释放与此流有关的所有系统资源。
void flush()
//刷新此输出流并强制写出所有缓冲的输出字节。一般写在关闭前
void write(byte[] b)
//将 b.length 个字节从指定的 byte 数组写入此输出流。
void write(byte[] b, int off, int len)
//将指定 byte 数组中从 off 开始的 len 个字节写入此输出流。
abstract void write(int b)
//将指定的字节写入此输出流。
FileOutputStream子类
new FileOutputStream(String path);
new FileOutputStream(File f[,boolean append]);//true--追加;false--覆盖
BufferedOutputStream子类
该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
new BufferedOutputStream(OutputStream out);
字符流读取
常用于txt文件
Reader抽象类
int read()
//读取单个字符。
int read(char[] cbuf)
//将字符读入数组。
abstract int read(char[] cbuf, int off, int len)
//将字符读入数组的某一部分。
int read(CharBuffer target)
//试图将字符读入指定的字符缓冲区。
abstract void close()
//关闭该流并释放与之关联的所有资源。
FileReader子类
用来读取字符文件的便捷类
FileReader(String fileName)
//在给定从中读取数据的文件名的情况下创建一个新 FileReader。
FileReader(File file)
//在给定从中读取数据的 File 的情况下创建一个新 FileReader。
InputStreamReader子类
- InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
- 它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
- 用来作为桥梁,把字节流转成字符流的桥梁。用来解决字符流读写乱码问题。
InputStreamReader(InputStream in ,String charsetName)
//String指定字符集
InputStreamReader(InputStream in)
//默认字符集
BufferedReader子类
- 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
- 可以指定缓冲区的大小,或者可使用默认的大小。
BufferedReader(Reader in)
字符流写出
writer抽象类
void write(char[] cbuf)
//写入字符数组。
abstract void write(char[] cbuf, int off, int len)
//写入字符数组的某一部分。
void write(int c)
//写入单个字符。
void write(String str)
//写入字符串。
void write(String str, int off, int len)
//写入字符串的某一部分。
abstract void close()
//关闭此流,但要先刷新它。
FileWriter子类
FileWriter(String fileName)
//根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)
//根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
OutputStreamWriter子类
- OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。
- 它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。
- 用来作为桥梁,把字节流转成字符流的桥梁。用来解决字符流读写乱码问题。
OutputStreamWriter(OutputStream out, String charsetName)
//创建使用指定字符集的 OutputStreamWriter。
OutputStreamWriter(OutputStream out)
//创建使用默认字符编码的 OutputStreamWriter。
BufferedWriter子类
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
BufferedWriter(Writer out)
//创建一个使用默认大小输出缓冲区的缓冲字符输出流。
上一篇: [OpenCV实战]37 图像质量评价BRISQUE
下一篇: 6包装类