目录
从狭义上,文件是磁盘持久化保存的存储IOs设备,当我们想要保存数据的时候,往往不是保存成一个整体,而是独立成一个过的单位进行保存,这个独立的单位就被抽象成文件的概念,类似于日常办公室里面真实的文件一样。
文件除了数据内容以外,还有一部分信息,如文件名,文件类型,文件大小。这些并不没有作为数据来存在,我们可以把这些内容视为文件的元信息。
随着文件越来越多,我们对于文件系统管理也有了更深的需求。
如何进行文件的组织呢,一种合乎自然的想法出现了,就是按照层级结构进行组织 —— 也就是我们数据结构中学习过的树形结构。这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder)或者目录(directory)的概念。
如何在文件系统中如何定位我们的一个唯一的文件就成为当前要解决的问题,但这难不倒计算机科学家,因为从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达的结点的路径所描述,而这种描述方式就被称为文件的绝对路径(absolute path)。
比如我们现在要找到一个d盘里面存的文件test.txt。
就可以用d:/test.txt来表示,这是绝对路径
除了这种的,我们还可以从任意节点出发,进行路径的描述,而这种描述方式就被称为相对路径。
上面的例子 可以这样表示 .:/test.txt 把前面的用一个点来省略掉 .代表当前节点,..代表父亲节点
比如..:/test.txt ,表示的是d盘这个文件目录
即使是普通文件,根据其保存数据的不同,也经常被分为不同的类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件。
有一个很简单区分文本文件或者是二进制文件的方式就是,二进制文件用记事本打开是乱码。如
而文本文件用记事本打开是我们能认出来的,非乱码。
Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意,有 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 | isFile() | 判断 File 对象代表的文件是否是一个普通文件 |
boolean | createNewFile() | 根据 File 对象,自动创建一个空文件。成功创建后返 回 true |
boolean | delete() | 根据 File 对象,删除该文件。成功删除后返回 true |
void | deleteOnExit() | 根据 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, 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());
}
public static void main(String[] args) throws IOException {
File file = new File("d:/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());
}
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());//判断是否存在
}
public static void main(String[] args) {
File dir = new File("some-die");
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());
}
public static void main(String[] args) throws IOException {
File file = new File("d:/test.txt"); // 要求 some-file.txt 得存在,可以是普通文件,可以是目录
File dest = new File("d:/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());
}