1. 认识文件
狭义上的文件(file):针对硬盘这种持久化存储的 IO 设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这种独立的单位就被抽象成文件的概念
文件除了有数据内容之外,还有一部分信息,例如:文件名、文件类型、文件大小等并不作为文件的数据而存在,称这部分信息为文件的元信息
2. 树形结构组织和目录
随着文件越来越多,出现了采用树形结构这种层级结构来组织文件的方法,这样专门用来存放管理信息的特殊文件称为文件夹(folder)或目录(dierctory)
3. 文件路径(Path)
在树形结构的角度来看,树中的每个节点都可以被 一条从根开始,直到节点 的路径所描述,这种描述方式被称为文件的绝对路径(absolute path)
除了可以从根开始进行路径的描述,还可以从任意节点出发,进行路径的描述,这种描述方式就称为相对路径(relative path),相当于当前所在节点的一条路径(. 表示当前目录,.. 表示当前目录的上一级目录)
tip:
普通文件根据其保存数据的不同,被分为不同的类型
文本文件:保存被字符集(UTF8 / GBK)编码的文本
二进制文件:按照标准格式保存的非被字符集编码过的文件(如:.exe .dll .mp3 .mp4 .class)
补充:
Windows 操作系统上,会按照文件名后的后缀来确定文件类型及该类型文件的默认打开程序,但这个习惯不是通用的,在 OSX、Unix、Linux 等操作系统上,一般不会对文件类型做如此精确的分类
文件由于被操作系统进行了管理,所以可以根据不同的用户,赋予其不同的对该文件的权限,一般有 可读、可写、可执行 权限
Windows 操作系统上,还有一类文件比较特殊,就是快捷方式(shortcut),这种文件只是对真实文件的一种引用,其他操作系统上也有类似的概念,如:软连接(soft link)
很多系统为了实现接口的统一性,将所有的 IO 设备都抽象成了文件的概念,使用这一理念最为知名的就是 Unix、Linux 操作系统——万物皆文件
4. Java中操作文件
Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述
tip:有 File 对象,并不代表真实存在该文件
文件的操作分为两大类
1) 文件系统操作:创建文件、删除文件、创建目录、重命名文件、判定文件存在…
2) 文件内容:读文件、写文件(Java中提供了 File 类进行文件系统操作,这个对象会使用“路径”进行初始化,从而表示一个具体的文件(这个文件可以存在,也可以不存在),基于这个对象进行后续操作)
5. File 类(文件系统操作)
5.1 属性
修饰符及类型 |
属性 |
说明 |
static String |
pathSeparator |
依赖于系统的路径分隔符,String 类型的表示 |
static char |
pathSeparator |
依赖于系统的路径分隔符,char 类型的表示 |
5.2 构造方法
签名 |
说明 |
File(File parent, String child) |
根据父目录 + 孩子文件路径,创建一个新的 File 实例 |
File(String pathname) |
根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径(此处写作相对路径的时候,需要明确基准目录是啥) |
File(String parent, String child) |
根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示 |
tip:代码中写的相对路径的基准目录是什么取决于运行程序的方式
- 直接在 IDEA 中运行,此时基准路径就是该项目所在的目录
- 在命令行中,通过 Java 命令来运行,此时基准路径就是 Java 命令所在的目录
- 某个程序,可能是被其他进程调用的,进程1通过创建子进程的方式,运行进程2(虽然在 Java 中很少见,但是可以做到),进程2的基准路径就和进程1相同
- 代码执行过程中,还可以通过一些 api 修改基准路径,改成我们指定的某个路径
5.3 方法
修饰符及返回值类型 |
方法签名 |
说明 |
String |
getParent() |
返回 File 对象的父目录文件路径 |
String |
getName() |
返回 File 对象的纯文件名称 |
String |
getPath() |
返回 File 对象的文件路径 |
String |
getAbsolutePath() |
返回 File 对象的绝对路径 < |