前言
Java 的 I/O 类库使用 流 这个抽象概念,代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。流 屏蔽了实际的 I/O 设备中处理数据的细节。
数据流是一串连续不断的数据的集合,简单理解的话,我们可以把 Java 数据流当作是 管道里的水流。我们只从一端供水(输入流),而另一端出水(输出流)。对输入端而言,只关心如何写入数据,一次整体全部输入还是分段输入等;对于输出端而言,只关心如何读取数据,,无需关心输入端是如何写入的。
对于数据流,可以分为两类:
- 字节流:数据流中最小的数据单元是字节(二进制数据)
- 字符流:数据流中最小的数据单元是字符(Unicode 编码,一个字符占两个字节)
1. 概述
对于 Java.io 包内核心其实就是如下几个类:InputStream、OutputStream、Writer、Reader、File、(RandomAccessFile)。只要熟练掌握这几个类的使用,那么 io 部分就掌握的八九不离十了。
对于上面的几个类,又可以如下分类:
- 文件:File、RandomAccessFile
- 字节流:InputStream、OutputStream
- 字符流:Writer、Reader
io 包内还有一些其他的类,涉及安全以及过滤文件描述符等等,这里重点只在 io 的输入输出,有兴趣可以自行了解:https://docs.oracle.com/javase/9/docs/api/java/io/package-tree.html
简单介绍一下这几个类:
- File:用于描述文件或者目录信息,通常代表的是 文件路径 的含义。
- RandomAccessFile:随机访问文件
- InputStream:字节流写入,抽象基类。
- OutputStream:字节流输出,抽象基类。
- Reader:字符流输入,抽象基类
- Writer:字符流输出,抽象基类
2. 文件
2.1 File
File - 文件和目录路径名的抽象表示。它既可以指代文件,也可以代表一个目录下的一组文件。当指代文件集时,可以调用 list() 方法,返回一个字符数组,代表目录信息。
下面简单列举 File 的使用:
1. 读取目录
public class TestFile {
public static void main(String[] args) {
File path = new File("./src/com/whdalive/io");
String[] list;
list = path.list();
for (String dirItem : list) {
System.out.println(dirItem);
}
}
}
/**输出
TestFile.java
*/
2. 创建目录
public class TestFile {
public static void main(String[] args) {
File file = new File("D://test1/test2/test3");
file.mkdirs();
System.out.println(file.isDirectory());
}
}
/**输出
true
*/
需要注意 mkdir() 和 mkdirs() 方法的区别
mkdir() 创建一个文件夹
mkdirs() 创建当前文件夹以及其所有父文件夹
3. 删除目录或文件
public class TestFile {
public static void main(String[] args) {
File file = new File("D://test1");
deleteFolder(file);
}
private static void deleteFolder(File folder) {
File[] files = folder.listFiles();
if (files!=null) {
for (File file : files) {