目录
- 🍀认识文件
- 🌸树型结构组织 和 目录
- 🌸文件路径(Path)
- 🌸其他知识
- 🌳Java 中操作文件
- 🌸File 概述
- 🌻属性
- 🌻构造方法
- 🌻方法
- 🌸代码示例
- 1. 观察 get 系列的特点和差异
- 2.普通文件的创建、删除
- 3.普通文件的删除
- 4.观察 deleteOnExit 的现象
- 5.观察⽬录的创建
- 6.观察⽬录创建2
- 7.观察⽂件重命名
- ⭕总结
🍀认识文件
我们先来认识狭义上的⽂件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进⾏数据保存时,
往往不是保存成⼀个整体,⽽是独⽴成⼀个个的单位进⾏保存,这个独⽴的单位就被抽象成⽂件的概
念,就类似办公桌上的⼀份份真实的⽂件⼀般。
⽂件除了有数据内容之外,还有⼀部分信息,例如⽂件名、⽂件类型、⽂件⼤⼩等并不作为⽂件的数
据⽽存在,我们把这部分信息可以视为⽂件的元信息。
🌸树型结构组织 和 目录
同时,随着⽂件越来越多,对⽂件的系统管理也被提上了⽇程,如何进⾏⽂件的组织呢,⼀种合乎⾃
然的想法出现了,就是按照层级结构进⾏组织⸺也就是我们数据结构中学习过的树形结构。这样,
⼀种专⻔⽤来存放管理信息的特殊⽂件诞⽣了,也就是我们平时所谓⽂件夹(folder)或者⽬录
(directory)的概念。
🌸文件路径(Path)
如何在⽂件系统中如何定位我们的⼀个唯⼀的⽂件就成为当前要解决的问题,但这难不倒计算机科学
家,因为从树型结构的⻆度来看,树中的每个结点都可以被⼀条从根开始,⼀直到达的结点的路径所
描述,⽽这种描述⽅式就被称为⽂件的绝对路径(absolute path)。
除了可以从根开始进⾏路径的描述,我们可以从任意结点出发,进⾏路径的描述,⽽这种描述⽅式就
被称为相对路径(relative path),相对于当前所在结点的⼀条路径。
🌸其他知识
即使是普通⽂件,根据其保存数据的不同,也经常被分为不同的类型,我们⼀般简单的划分为⽂本⽂
件和⼆进制⽂件,分别指代保存被字符集编码的⽂本和按照标准格式保存的⾮被字符集编码过的⽂
件。
Windows 操作系统上,会按照⽂件名中的后缀来确定⽂件类型以及该类型⽂件的默认打开程序。但这
个习俗并不是通⽤的,在 OSX、Unix、Linux 等操作系统上,就没有这样的习惯,⼀般不对⽂件类型
做如此精确地分类。
⽂件由于被操作系统进⾏了管理,所以根据不同的⽤⼾,会赋予⽤⼾不同的对待该⽂件的权限,⼀般
地可以认为有可读、可写、可执⾏权限。
Windows 操作系统上,还有⼀类⽂件⽐较特殊,就是平时我们看到的快捷⽅式(shortcut),这种⽂
件只是对真实⽂件的⼀种引⽤⽽已。其他操作系统上也有类似的概念,例如,软链接(soft link)等。
最后,很多操作系统为了实现接⼝的统⼀性,将所有的 I/O 设备都抽象成了⽂件的概念,使⽤这⼀理念最为知名的就是 Unix、Linux 操作系统⸺万物皆⽂件。
🌳Java 中操作文件
本节内容中,我们主要涉及⽂件的元信息、路径的操作,暂时不涉及关于⽂件中内容的读写操作。
Java 中通过java.io.File 类来对⼀个⽂件(包括⽬录)进⾏抽象的描述。
注意,有 File 对象,
并不代表真实存在该⽂件。
🌸File 概述
我们先来看看 File 类中的常见属性、构造⽅法和⽅法
🌻属性
🌻构造方法
🌻方法
🌸代码示例
1. 观察 get 系列的特点和差异
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("..\\hello-world.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());
}
}
运⾏结果
..
hello-world.txt
..\hello-world.txt
D:\代码练习\⽂件⽰例1\..\hello-world.txt
D:\代码练习\hello-world.txt
2.普通文件的创建、删除
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("hello-world.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());
System.out.println(file.createNewFile());
}
}
运⾏结果
false
false
false
true
true
false
true
false
3.普通文件的删除
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("some-file.txt"); // 要求该⽂件不存在,才能看到相
System.out.println(file.exists());
System.out.println(file.createNewFile());
System.out.println(file.exists());
System.out.println(file.delete());
System.out.println(file.exists());
}
}
运⾏结果
false
true
true
true
false
4.观察 deleteOnExit 的现象
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("some-file.txt"); // 要求该⽂件不存在,才能看到相
System.out.println(file.exists());
System.out.println(file.createNewFile());
System.out.println(file.exists());
file.deleteOnExit();
System.out.println(file.exists());
}
}
运⾏结果
false
true
true
true
程序运⾏结束后,⽂件还是被删除了
5.观察⽬录的创建
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File dir = new File("some-dir"); // 要求该⽬录不存在,才能看到相同的现
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
运⾏结果
false
false
true
true
false
6.观察⽬录创建2
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File dir = new File("some-parent\\some-dir"); // some-parent 和 so
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdir());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
运⾏结果
false
false
false
false
false
mkdir() 的时候,如果中间⽬录不存在,则⽆法创建成功; mkdirs() 可以解决这个问题。
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File dir = new File("some-parent\\some-dir"); // some-parent 和 so
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
System.out.println(dir.mkdirs());
System.out.println(dir.isDirectory());
System.out.println(dir.isFile());
}
}
运⾏结果
false
false
true
true
false
7.观察⽂件重命名
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
File file = new File("some-file.txt"); // 要求 some-file.txt 得存在
File dest = new File("dest.txt"); // 要求 dest.txt 不存在
System.out.println(file.exists());
System.out.println(dest.exists());
System.out.println(file.renameTo(dest));
System.out.println(file.exists());
System.out.println(dest.exists());
}
}
运⾏结果
true
false
true
false
true
⭕总结
关于《【Java EE 】认识文件与Java文件操作》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!