文章目录
- 一、初识文件
- 二、File类
- 构造方法
- 常用方法
一、初识文件
我们目前是如何存储数据的?弊端是什么?
int a = 1;
int[] arr = new int[5];
我们这些数据是在内存中存储的,是不能够长久保存的。
那么,我们的计算机当中有没有一块硬件可以长久存储数据的?
磁盘中的数据形式就是文件,文件是数据的载体。
我们这个文件(File),在计算机中有很多不同的意义。
狭义的文件: 就是我们硬盘上的文件和目录(文件夹)
广义的文件: 泛指我们计算机当中的很多软硬件资源,操作系统把许多软硬件资源抽象成了文件,按照文件的方式来进行统一管理。
我们这里讨论的是侠义的文件。
我们的每个文件,在我们的硬盘上都有一个具体的"路径",比如我们这里的D:\maven,我们这里可以用/来分割不同的目录级别。
就可以表示为: D:\maven\apache-maven-3.6.1\maven_repository
细心的同学可以发现,我们在路径的时候,使用/或者\划分目录级别都是可以的,但是更建议大家使用 / ,因为 \ 容易出现转义字符。
比如: d:\tbd,我们就会把\t当成一个转义字符了,而不是\。
我们的文件路径这里,有两种表示路径的方法:
1.绝对路径:也就是带有C: D: 盘符开头的路径
2.相对路径:以当前所在的目录为基准,以 . 或者 … 开头(, 有时可以省略),找到指令路径。
比如,我们现在的工作目录是:D:\maven,我们想定位apache-maven-3.6.1这个目录,就可以表示./apache-maven-3.6.1(./就可以表示当前目录。
如果我们在刚才的工作目录下想要访问该目录,就可以表示为:
./apache-maven-3.6.1/maven_repository
如果,在刚才的工作目录下,我们想要访问navicat目录,相对路径写作为:…/navicat(…表示当前目录的上级目录)
在我们日常使用的各种各样的文件:word,execl,图片,音频,视频等待,可以分为两大类:
1.文本文件(存放的是文本,字符串),这个文本文件里的数据,一定是合法的字符,都是指定字符集编码表里的数据。
2.二进制文件(存放的是二进制数据),可以存放任何想存放的数据。
我们可以通过一个很简单的方式来判断是什么类型的文件,直接用记事本的方式打开文件。
这里我用记事本打开了一个word文件,如果出现的是这种乱码就证明是二进制文件,如果不是乱码就是文本文件。
二、File类
我们想要操作文件,得经过一些步骤:
- 先要定位文件:File类可以定位文件,进行删除,获取文件本身信息等操作。但是不能读写文件
- 读写文件数据:IO流技术可以对硬盘中的文件进行读写操作。
我们先来学习第一步的操作,学习一下File类
构造方法
方法 | 作用 |
---|---|
File(File parent, String child) | 根据父文件 + 孩子文件路径,创建文件 |
File(String path name) | 根据一个文件路径(绝对或者相对路径都可以)去创建文件 |
File(String parent, String child) | 根据父目录(路径) + 孩子路径,创建文件 |
public static void main(String[] args) {
File file = new File("D:/maven");
}
这里我们就传入了一个决定路径,定位到了maven目录。
常用方法
返回值类型 | 方法 | 作用 |
---|---|---|
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() | 自动创建一个新文件,创建成功返回true |
boolean | delete() | 根据File对象删除该文件,删除成功返回true |
void | deleteOnExist() | 根据File对象,标注该文件将被删除,当JVM运行结束才会执行 |
String[] | list() | 返回File对象目录下所有的文件名 |
File[] | listFiles() | 返回File对象目录下的所有文件,以File对象的形式表示 |
boolean | mkdir() | 创建File对象表示的目录 |
boolean | mkdirs() | 创建File对象表示的多级目录 |
boolean | renameTo(File dest) | 对文件进行改名 |
boolean | canRead() | 判断用户是否对文件有可读权限 |
boolean | canWrite() | 判断用户是否对文件有可写权限 |
我们来简单使用一下这些方法
public static void main(String[] args) throws IOException {
File file = new File("D:/zd.txt");
System.out.println(file.getName());
System.out.println(file.getParent());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
我们在使用IDEA的时候,我们所处在项目所在的工作目录下。
public static void main(String[] args) throws IOException {
File file = new File("./zd.txt");
System.out.println(file.getName());
System.out.println(file.getParent());
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
}
我们的IDEA没有这个文件,我们来创建一下。
public static void main(String[] args) throws IOException {
File file = new File("./zd.txt");
file.createNewFile();
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
}
我们发现,我们已经成功的创建了一个文件,但是可能有的同学进行了刚才的操作之后,这里没有显示该文件。
我们可以右键项目,然后选择Reload from Disk刷新一下。
然后我们也可以试着删除一下这个文件。
public static void main(String[] args) {
File file = new File("./zd.txt");
file.delete();
System.out.println(file.exists());
}
我们可以发现我们已经成功删除,同时标准库还为我们提供了deleteOnExit程序退出的时候,自动删除,这一功能,在我们使用"临时文件"的时候需要用到。
比如我们打开一个DOCX文档的时候,就会生成一个临时文件,当我们关闭文档的时候,文件自动删除了,至于为什么有这个操作也很好理解,这个临时文件保存了我们实时编辑的内容(尤其是没有保存的内容),防止我们编辑了很多内容,突然停电了,然后没有保存,但由于临时文件的存在,下次我们启动DOCX文档时,就会提醒我们是否要恢复之前的编辑。
我们这里的临时文件就可以使用deleteOnExist的方式来删除了。
public static void main(String[] args) {
File file = new File("./test");
file.mkdir();
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
}
我们就成功的创建了一个目录,如果我们想创建多级目录的话,就得使用mkdirs了,我们的mkdir只能创建单级目录