文件
文件:File
这个概念,在计算机里也是一次多用:
狭义的文件:指的是硬盘上的文件和目录。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。
广义的文件:泛指计算机中的很多的软硬件资源.
同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然的想法出现了,就是按照层级结构进行组织 —— 也就是我们数据结构中学习过的树形结构。这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder)或者目录(directory)的概念。
文件路径(Path)
每个文件,在硬盘上都有一个具体的路径。
例如:上述照片的路径就是:E:/rocket.jpg
表示一个文件的具体位置路径,就可以使用 / 来分割不同的目录级别。
就可以表示为:E:tmp111aaa
在Windows中/
和都可以来做分隔符。但是在平常的代码中更建议使用
/
,因为/
不存在字符转义问题。
在路径这里,有两种表示路径的风格。
- 绝对路径,以
c: d:
盘符开头的路径 - 相对路径,以当前所在的目录为基准,以
.
或者..
开头(有时可以省略),找到指定的路径
当前所在目录:称为工作目录,每个程序运行的时候,都有一个工作目录。
定位到111这个目录,是E:/tmp
如果工作目录不同,定位到同一个文件,相对路径写法是不同的:
例如:定位到111
如果工作目录是E:/
相对路径写作:./tmp/111
如果工作目录是E:/tmp
相对路径写作:./111
如果工作目录是E:/tmp/222
相对路径写作:../111
如果工作目录是E:/tmp/222/bbb
相对路径写作:../../111
..
表示上一级路径
文件的类型
文件的类型有很多种,比如:word,exe,图片,视频,pdf,源代码,动态库等。这些文件可以归纳到两类中:
- 文本文件(存的是文本,字符串) 字符串,是由字符构成的,每个字符,都是通过一个数字来表示的。这个文本文件里存的数据,一定是合法的字符,都是指定字符编码的码表之内的数据。
- 二进制文件(存的是二进制,不一定是字符串) 没有任何限制
如何判断一个文件是二进制还是文本文件? 使用记事本打开,如果乱码就是二进制文件;如果没有乱码,就是文本。
Java中操作文件
主要分为两类:
- 针对文件系统操作。(文件的创建,删除,重命名)
- 针对文件内容操作。(文件的读和写)
Java 中通过 java.io.File
类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不
代表真实存在该文件。
File概述
常见属性
修饰符及类型 | 属性 | 说明 |
---|---|---|
static String | pathSeparator | 依赖于系统的路径分隔符,String 类型的表示 |
static char | pathSeparator | 依赖于系统的路径分隔符,char 类型的表示 |
pathSeparator
(File中的一个静态变量)就是/
或者跟着系统走。
构造方法
签名 | 说明 |
---|---|
File(File parent, Stringchild) | 根据父目录 孩子文件路径,创建一个新的 File 实例 |
File(String pathname) | 根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径 |
File(String parent, Stringchild) | 根据父目录 孩子文件路径,创建一个新的 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(Filedest) | 进行文件改名,也可以视为我们平时的剪切、粘贴操作 |
boolean | canRead() | 判断用户是否对文件有可读权限 |
boolean | canWrite() | 判断用户是否对文件有可写权限 |
方法演示:
注意:
代码语言:javascript复制File file = new File("./test.txt");
中不要求E:/
这里真的有test.txt
如果想要可以自己手动创建:
throws IOException
这个异常在IO中是特别容易出现的异常。
deleteOnFile()
程序退出的时候,自动删除。(打开一个word文档,就会在同级目录下生成出一个临时文件,关闭word,这个文件就没有了)
这个临时文件,相当于保存了当前实时编辑的内容,防止编辑了很多东西之后突然停电,导致数据丢失。这种临时数据就使用deleteOnExit的方式来删除。
文件内容的读写——数据流
什么叫做流呢?
举个