【I/O】文件系统操作
目录
一. 文件的概念
二.文件系统
三. File类
(1)构造方法
(2)方法
(1)获取文件路径
(2)判断文件状态
(3)创建文件
(4)创建目录
(5)删除文件
(6)列出目录中的文件信息
(7)文件的重命名
(8)文件的移动
一. 文件的概念
对于计算机来说,文件是一个广义的概念,硬盘上的普通文件和目录(文件夹)都可以称为文件,很多硬件设备,也被操作系统抽象成了文件(网卡,显示器等)
文件(File)是数据存储和管理的基本单位,它是存储在存储介质(如硬盘、SSD、U盘等)上的命名数据集合。
计算机存储设备的比较
存储数据设备 | 速度 | 容量 | 价格 | 数据持久性 |
---|---|---|---|---|
CPU (寄存器, 缓存) | 最快 | 最小 | 最贵 | 丢失 |
内存 | 其次 | 其次 | 其次 | 丢失 |
硬盘 | 最慢 | 最大 | 最便宜 | 不丢失 |
我们常说的文件是存储在硬盘上的文件 ,所以操作文件的很多特性和硬盘的结构有关,由于操作系统(文件系统)对硬件结构细节进行了封装,并提供了一系列API,我们使用时直接调用即可
二. 文件系统
文件系统是操作系统用于管理存储设备的一个模块,定义了数据的一系列操作方式,为用户和应用程序提供了统一的文件操作接口。
(1)文件系统通过树形结构组织文件
- 这里的树不是二叉树,是N叉树
- 一个普通文件(非目录)就是一个叶子结点
- 一个目录文件可能包含0个或多个叶子节点
(2) 路径
路径:描述一个文件的具体位置,路径分为绝对路径和相对路径
- 绝对路径:从根节点出发,一层一层走下去,最终找到目标文件
- 相对路径:指定一个起点,从起点(当前目录)出发,一层层走下去,最终找到目标文件
举例
- 一个文件的绝对地址是:C:/User/1/Text.txt
- 如果当前目录: C:/User/1
- 那么相对路径: . /Text.txt
注意
. 表示当前目录,. . 表示上层目录,/ 分隔符,用于分割目录的各个部分
- 在知道路径的情况下,查找这个文件的过程,不是遍历
- 在不知道路径的情况下,查找这个文件的过程,是遍历(不重不漏的查看所有文件)
(3)文件的分类
文件主要分为两类:二进制文件和文本文件
- 文本文件:文件中的内容通过字符编码处理过(ASCII或者UTF-8)
- 二进制文件:文件中的内容没有限制,任何形式的文件都可以
注意:所有文件本质均为二进制存储
如何判断文件的类型
我们可以使用记事本打开,如果为乱码(二进制文件),可以正常阅读(文本文件)
常见的文本文件和二进制文件
.txt , .c , .java文件都是文本文件
word的.docx 文件,excel的 .xlsx 文件,.pptx都是二进制文件
三. File类
在java中针对文件系统操作,使用File类,此处的文件系统操作指的是创建文件,删除文件,重命名文件等
File类在java.io包下,此处数据从硬盘到cpu的操作是输入操作
(1)构造方法
签名 | 说明 |
---|---|
File(File parent, Stringchild) | 根据父目录(File对象)和孩子文件路径,创建一个新的File实例 |
File(String pathname) | 根据文件路径创建一个新的File实例,路径可以是绝对路径或相对路径 |
File(String parent, Stringchild) | 根据父目录(字符串路径)和孩子文件路径,创建一个新的File实例 |
示例:
File file = new File(new File("D:/1"),"Text_1.txt");
File file = new File("D:/1/Text_1.txt");
File file1 = new File("D:/1","Text_1.txt");
在输入文件路径的时候,优先使用相对路径 ,输入的路径也可以不存在
(2)方法
返回值类型 | 方法 | 说明 |
---|---|---|
String | getParent() | 返回File对象的父目录文件路径 |
String | getName() | 返回File对象的文件名称 |
String | getPath() | 返回File对象的文件路径 |
String | getAbsolutePath() | 返回File对象的绝对路径 |
String | getCanonicalPath() | 返回File对象的修饰过的绝对路径(标准路径) |
boolean | exists() | 判断File对象描述的文件是否真实存在 |
boolean | isDirectory() | 判断File对象代表的文件是否是一个目录 |
boolean | isFile() | 判断File对象代表的文件是否是一个普通文件 |
boolean | createNewFile() | 根据File对象,自动创建一个空文件。成功创建后返回true |
boolean | delete() | 根据File对象,删除该文件。成功删除后返回true |
void | deleteOnExit() | 根据File对象,标注文件将被删除,删除动作在代码执行完后进行 |
String[] | list() | 返回File对象代表的目录下的所有文件名 |
File[] | listFiles() | 返回File对象代表的目录下的所有文件,以File对象表示 |
boolean | mkdir() | 创建File对象代表的目录 |
boolean | mkdirs() | 创建File对象代表的目录,如果必要,会创建中间目录 |
boolean | renameTo(File dest) | 进行文件改名,也可以视为我们平时的剪切、粘贴操作 |
boolean | canRead() | 判断用户是否对文件有可读权限 |
boolean | canWrite() | 判断用户是否对文件有可写权限 |
(1)获取文件路径
import java.io.File; import java.io.IOException; //路径获取 public class Demo_1 { public static void main(String[] args) throws IOException { // File file = new File("D:/1/Text_1.txt"); File file =new File("./Text_1.txt"); //获取上一个目录 System.out.println(file.getParent()); //获取文件名称 System.out.println(file.getName()); //获取路径 System.out.println(file.getPath()); //获取绝对路径(先找到上一级目录的绝对路径,在这个基础上找文件路径) System.out.println(file.getAbsoluteFile()); //获取绝对路径 System.out.println(file.getCanonicalPath()); } }
使用相对路径
使用绝对路径
getPath方法:返回的是构造方法中的参数
getAbsoluteFile方法
- 相对路径:先找到当前路径的绝对地址,再根据相对地址开始找文件(多出来一个 . )
- 绝对路径:正常输出绝对路径的地址
(2)判断文件状态
import java.io.File; import java.io.IOException; //文件的创建和删除 public class Demo_2 { public static void main(String[] args) throws IOException, InterruptedException { File file = new File("./Text_txt"); //判断是否存在 System.out.println(file.exists()); //判断是不是文件 System.out.println(file.isFile()); //判断是不是目录 System.out.println(file.isDirectory()); } }
![]()
(3)创建文件
如果创建成功则会返回true,反之返回false
boolean b = file.createNewFile(); System.out.println("是否创建成功:"+b); System.out.println(file.isFile());
(4)创建目录
创建单级目录
如果创建成功则会返回true,反之返回false
File file1 =new File("./aaa"); boolean b1 = file1.mkdir(); System.out.println("是否创建成功:"+b1);
创建多级目录
如果创建成功则会返回true,反之返回false
File file2 =new File("./111/222/333"); boolean b2 = file2.mkdirs(); System.out.println("是否创建成功:"+b2);
(5)删除文件
直接删除
如果删除成功则会返回true,反之返回false
//直接删除 boolean b1 = file.delete(); System.out.println("是否删除成功:"+b1);
延迟删除
file.deleteOnExit();
没有返回值
(6)列出目录中的文件信息
列出文件名(字符串形式输出)
File file = new File("./"); //列出文件和目录信息 String[] files = file.list(); System.out.println(Arrays.toString(files));
列出文件对象(文件形式输出)
File file = new File("./"); //列出文件和目录信息(以文件格式输出) File[] files1 = file.listFiles(); System.out.println(Arrays.toString(files1));
只有目录才可以列出其中的文件信息,如果是文件,那么会返回null
(7)文件的重命名
File file = new File("./AAA.txt"); File file1 = new File("./AAA1.txt"); //创建出file文件 file.createNewFile(); //重命名 file.renameTo(file1);
在重命名之前,保证文件一定存在,本质上移动就是修改文件的路径信息
(8)文件的移动
File file2 = new File("./AAA2.txt"); file2.createNewFile(); File file3 = new File("./aaa/AAA2.txt"); //移动 file2.renameTo(file3);
移动和重命名的方法类似,都是在修改路径信息
点赞的宝子今晚自动触发「躺赢锦鲤」buff!