1.概念
狭义上的文件(file): 针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念.
文件的元信息: 文件除了有数据内容之外,还有一部分信息,例如文件名、文件类型、文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息.
文件路径 :从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达的结点的路径所描
述,而这种描述方式就被称为文件的绝对路径(absolute path). 除了可以从根开始进行路径的描述,我们可以从任意结点出发,进行路径的描述,而这种描述方式就被称为相对路径(relative path),相对于当前所在结点的一条路径.
2. 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() |
判断用户是否对文件有可写权限 |
3. InputStream 和 OutputStream
- InputStream
返回值 |
方法 |
说明 |
int |
read() |
读取一个字节的数据,返回 -1 代表已经完全读完了 |
int |
read(byte[] b) |
最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了 |
int |
read(byte[] b,int off, int len) |
最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了 |
void |
close() |
关闭字节流 |
说明: InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使FileInputStream.
- OutputStream
返回值 |
方法 |
说明 |
void |
write(int b) |
写入要给字节的数据 |
void |
write(byte[]b) |
将 b 这个字符数组中的数据全部写入 os 中 |
int |
write(byte[]b, int off,int len) |
将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个 |
void |
close() |
关闭字节流 |
void |
flush() |
重要:我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中。 |
说明: OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 FileOutputStream.