目录
1. 文件系统
认识⽂件
针对硬盘这种持久化存储的I/O设备,当我们想要进⾏数据保存时, 往往不是保存成⼀个整体,⽽是独⽴成⼀个个的单位进⾏保存,这个独⽴的单位就被抽象成⽂件的概 念,就类似办公桌上的⼀份份真实的⽂件⼀般。(这是狭义的文件定义)
⽂件除了有数据内容之外,还有⼀部分信息,例如⽂件名、⽂件类型、⽂件⼤⼩等并不作为⽂件的数 据⽽存在,我们把这部分信息可以视为⽂件的元信息。
树形结构组织和目录
随着文件数量的增多,文件的系统管理也就提上了日程。那么如何对文件进行管理呢?那就是我们数据结构中学习过的树形结构,文件夹便是以这种形式组织的。不仅仅是二叉树,而是N叉树,毕竟一个文件夹里不可能只用到两个嘛。
这就是所谓⽂件夹(folder)或者⽬录 (directory)的概念。
2. 绝对路径和相对路径
如何在⽂件系统中如何定位我们的⼀个唯⼀的⽂件就成为当前要解决的问题,但这难不倒计算机科学 家,因为从树型结构的⻆度来看,树中的每个结点都可以被⼀条从根开始,⼀直到达的结点的路径所 描述,⽽这种描述⽅式就被称为⽂件的绝对路径(absolute path)。
绝对路径的表示形式可以表述为下图:


C:\ProgramData\Epic
在Windows中我们往往用 \ 分隔符,而在其他操作系统中往往采用 / 分隔符,不过Windows也支持以上操作,这涉及到历史缘由,Windows的内核曾是Dos,在这里就不展开了。
除了可以从根开始进⾏路径的描述,我们可以从任意结点出发,进⾏路径的描述,⽽这种描述⽅式就 被称为相对路径(relative path),相对于当前所在结点的⼀条路径。

从上图可知,相对路径的表示需要先定好基准目录,不然“相对”就无从谈起。
值得提醒的是:
- . /表示当前目录路径
- ../表示上一级目录路径
同时,需要说明的是,在IDEA中的基准目录就是IDEA打开这个项目的路径。
3. Java中的文件系统操作

这上面的方法我们不需要记忆,用的时候看一下就好了。
不过扫描全体文件的操作相对来说重要一点,我们实现以下:
public class demo1 {
public static void scan(File currentDir) {
//1. 先判断是否是目录
if (!currentDir.isDirectory()) {
return;
}
//2. 列出目录中的内容
File[] files = currentDir.listFiles();
if (files == null || files.length == 0) {
//不存在的路径 / 目录
return;
}
//3. 递归遍历文件内容
for (File file : files) {
if (file.isFile()) {
System.out.println(file.getAbsoluteFile());
} else {
//如果是目录,继续递归
scan(file);
}
}
}
public static void main(String[] args) {
File file = new File("./");
scan(file);
}
}
运行结果:
4. Java中的文件内容操作
文件内容操作我们通过“文件流”(stream)的概念实现操作。

以上简单介绍了IO流的特点,具体的操作我们留到下次再讲解。
在最后给大家看个头疼的东西:
当我们在OJ平台上刷算法题时,Java的Scanner涉及的IO操作是很多的,因此,用以上的方法可以大幅地减少IO的影响。

被折叠的 条评论
为什么被折叠?



