☕导航小助手☕
写在前面
一、文件
1.1 文件的概念
1.2 文件的路径
二、 Java中文件系统操作
2.1 File类的属性
2.2 File类的构造方法
2.3 File类的方法
2.3.1 File类的常用获取方法
2.3.2 File类的常用判断方法
2.3.3 文件的创建与删除
2.3.4 其他的常用方法
2.4 代码示例演示
2.4.1 演示一:演示File类的一些常见用法
2.4.2 演示二:文件的创建及其相关属性
2.4.3 演示三:文件的删除
2.4.4 演示四:创建目录
2.4.5 演示五:文件重命名
在本篇博客中,将主要介绍 的时文件的概念、文件的路径、Java中 文件系统的操作(主要介绍 File类 的各种属性与方法)~
另外,为了防止产生视觉疲劳,这块内容将分为上篇、下篇 两篇博客来介绍 ~
我们平时所说的文件,一般都是存储在计算机硬件上面的文件,可以是 文本文档、图片、程序等等,一般是以 .jpg 、 .txt 、 .mp3 、 .mp4 、 .pptx 等文件格式 ~
而在计算机中的概念,目录(也就是 文件夹)也是文件的一种,称为 目录文件 ~
文件的路径 一般分为两种:一种是 绝对路径,一种是相对路径 ~
绝对路径:以盘符开头 的路径 ~
相对路径:以 . 或者 .. 开头的 路径,需要先明确一个基准路径,来找到目标的目录 ~
目录和目录之间,可以用 \ 分割,也可以使用 / 分割;
但是更推荐使用 / 的,因为 \ 在字符串里面表示 转义字符,要想表示分割,就需要 \\,还不如直接用 / 来的更好 !!!
来列举一个例子,以帮助大家更好的理解 绝对路径 和 相对路径 ~
假设 A同学 想要去图书馆看书,但是由于学校非常的大,绕来绕去的就把 A同学 绕晕了 ~
此时,A同学看到 学校大门口旁边有个 警卫,于是就跑过去问路 ~
那么,此时 绝对路径 的内容都是固定的,无论 A同学在哪里,这条路经都是不变的 ~
而所谓的相对路径,其实就是相对的(以 A同学自身的位置为基准的):
当 A同学在校门口的时候,相对路径就是
当 A同学在躬行楼的时候,相对路径就是
在使用 Idea 运行程序的时候,当前的工作目录(取为基准路径)就是项目所在的目录 ~
在之前所介绍过的 冯诺依曼体系结构中,我们已经知道,文件是存储在硬盘上的!
复习一下:硬盘(外存) 和 内存的 4 个区别(重点掌握):
- 内存存储空间小,硬盘存储空间大
- 内存访问速度快,硬盘访问速度慢
- 内存成本高,硬盘成本低
- 内存掉电数据丢失,硬盘掉电数据还在
文件也是被操作系统所管理,在操作系统内核中 有一个专门的模块 —— 文件系统(大概会以某种方式来管理硬盘上的文件) ~
在 Java 中针对 文件系统/文件 进行了一系列的封装,我们可以根据 Java API 对文件进行一些操作,专门提供了 File类,以表示一个文件 ~
然后,就可以基于 File类,来完成一些关于文件的操作 ~
修饰符及类型 | 属性 | 说明 |
---|---|---|
static String | pathSeparator | 依赖于系统的路径分隔符,String 类型的表示 |
static char | pathSeparator | 依赖于系统的路径分隔符,char 类型的表示 |
分隔符是 / 还是 \ ,暂时不需要纠结,因为平常我们暂时用不到 ~
构造方法 | 说明 |
---|---|
File (File parent,String child) | 根据父目录 + 孩子文件路径,创建一个新的 File实例 |
File (String pathname) | 根据文件路径 创建一个新的 File实例,路径可以是绝对路径 也可以是相对路径 |
File (String parent,String child) | 根据父目录 + 孩子文件路径,创建一个新的 File实例,父目录用路径表示 |
我们可以通过 构造方法 来基于一个路径,构造出一个文件 ~
修饰符及返回值类型 | 方法 | 说明 |
---|---|---|
String | getParent() | 返回 File对象 的父目录文件路径 |
String | getName() | 返回 File对象 的纯文件名称 |
String | getPath() | 返回 File对象 的文件路径 |
String | getAbsolutePath() | 返回 File对象 的绝对路径 |
String | getCanonicalPath() | 返回 File对象 的修饰过的绝对路径 |
修饰符及返回值类型 | 方法 | 说明 |
---|---|---|
boolean | exists() | 判断 File对象 描述的文件是否真实存在 |
boolean | isDirectory() | 判断 File对象 代表的文件是否是一个目录 |
boolean | isAbsolute() | 判断 File对象 代表的文件是否是绝对路径 |
boolean | isFile() | 判断 File对象 代表的文件是否是一个普通文件 |
boolean | canRead() | 判断用户是否对文件有可读权限 |
boolean | canWrite() | 判断用户是否对文件有可写权限 |
修饰符及返回值类型 | 方法 | 说明 |
---|---|---|
boolean | createNewFile() | 根据 File对象,自动创建一个空文件,成功创建后返回 true |
boolean | delete() | 根据 File对象,删除该文件,成功删除后返回 true |
void | deleteOnExit() | 根据 File对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行 |
boolean | mkdir() | 创建 File对象 代表的目录(单行目录) |
boolean | mkdirs() | 创建 File对象 代表的目录(多行目录) |
修饰符及返回值类型 | 方法 | 说明 |
---|---|---|
String[ ] | list() | 返回 File对象 代表的目录下的 所有文件名 |
File[ ] | listFiles() | 返回 File对象 代表的目录下的所有文件,以 File对象表示 |
boolean | rename(File dest) | 进行文件重命名 |
package file;
import java.io.File;
import java.io.IOException;
//演示 file类 的一些常见用法
public class Demo1 {
public static void main(String[] args) throws IOException {
File file = new File("d:/test.txt");
System.out.println("获取到父路径:" + file.getParent());
System.out.println("获取到文件名:" + file.getName());
System.out.println("获取到路径" + file.getPath());
System.out.println("获取到绝对路径:" + file.getAbsolutePath());
System.out.println("获取到修饰过的路径:" + file.getCanonicalPath());
}
}
运行结果:
package file;
import java.io.File;
import java.io.IOException;
//演示 file类 的一些常见用法
public class Demo1 {
public static void main(String[] args) throws IOException {
File file = new File("./test.txt");
System.out.println("获取到父路径:" + file.getParent());
System.out.println("获取到文件名:" + file.getName());
System.out.println("获取到路径" + file.getPath());
System.out.println("获取到绝对路径:" + file.getAbsolutePath());
System.out.println("获取到修饰过的路径:" + file.getCanonicalPath());
}
}
运行结果:
package file;
import java.io.File;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
//前面没有写 ./ ,但是也相当于是 相对路径,即 相当于是有 ./ (./ 可以省略)
File file = new File("HelloWorld.txt");
System.out.println("当前目录下,是否存在该文件:" + file.exists());
System.out.println("判断其是否是目录:" + file.isDirectory());
System.out.println("判断其是否是文件:" + file.isFile());
System.out.println("--------------------------------------------------");
//现在可以创建一个文件
file.createNewFile();
System.out.println("当前目录下,是否存在该文件:" + file.exists());
System.out.println("判断其是否是目录:" + file.isDirectory());
System.out.println("判断其是否是文件:" + file.isFile());
}
}
运行结果:
此时,我们可以看见,程序运行结束后,创建了一个新的文件:
同时,当找到绝对路径去观察时,就会发现真的创建了一个文件:
第一种删除方法:delete 方法(直接删除)
package file;
import java.io.File;
public class Demo3 {
public static void main(String[] args) {
//文件删除
File file = new File("HelloWorld.txt");
file.delete();
System.out.println(file.exists());
}
}
运行结果:
我们可以看见,"HelloWorld.txt"文件就真的被删除了 ~
打开绝对路径的时候,文件确实被删除了 ~
第二种删除方法:deleteOnExit 方法(程序退出之后再删除,可以用来创建一些临时文件)
偷偷摸摸的又运行了一下 Demo2,以创建出文件 ~
我们可以看见,当运行到打印 文件是否存在 的时候,仍然是文件存在的 ~
当程序运行结束之后,文件才不存在被删除了 ~
同时,当打开绝对路径的时候,确实发现文件没有了 ~
如果我们创建的是单级目录的话,可以使用 mkdir 方法:
package file;
import java.io.File;
public class Demo4 {
//创建目录
public static void main(String[] args) {
File file = new File("test");
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println("---------------------");
file.mkdir();
System.out.println(file.exists());
System.out.println(file.isDirectory());
}
}
运行结果:
此时,可以观察到左边,真的创建了一个目录:
当打开绝对路径去观察时,也会发现真的出现了一个目录(文件夹):
当我们想要创建的是多级目录时,使用的就需要是 mkdirs 方法(如果继续使用 mkdir 方法,就会发现它是错误的)~
package file;
import java.io.File;
public class Demo4 {
//创建目录
public static void main(String[] args) {
File file = new File("test/aa/1");
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println("---------------------");
//file.mkdir();
//创建多级目录的时候需要用的是 mkdirs 方法
file.mkdirs();
System.out.println(file.exists());
System.out.println(file.isDirectory());
}
}
运行结果:
同时,可以观察到左边创建了目录:
当打开绝对路径去观察时,也会发现创建了多级目录:
package file;
import java.io.File;
public class Demo5 {
//文件重命名
public static void main(String[] args) {
File file1 = new File("./test1.txt");
File file2 = new File("./test2.txt");
file1.renameTo(file2);
}
}
运行结果:
我们可以很清楚的看见,文件名 test1.txt 运行程序之后,重命名为了 test2.txt ~
好了,关于 文件操作和IO 的上半篇的内容就介绍到这里了,下半篇的内容就留到下一篇博客来介绍 ~
如果感觉这一篇博客对你有帮助的话,可以一键三连走一波,非常非常感谢啦 ~