<JavaEE> 文件IO -- File类和文件操作
目录
一、文件的概念
什么是文件? |
广义上的“文件”是指抽象化的操作系统中的硬件设备和软件资源,目的是对这些“文件”进行同一的管理。 |
狭义上的“文件(FIle)”则只是指在硬件设备中保存的数据,这些数据往往以一个一个的单位进行保存,每一个独立的单位就称为“文件”。 |
二、文件系统
1)什么是文件系统? |
是一个“树形结构”实现的系统,用于组织管理文件。 |
操作系统通过“目录”对文件进行组织管理。利用目录的层次结构来描述文件所在位置,即“路径”。 |
由于“树形结构”的特点,每个文件都会有自己的唯一路径。通过路径,就可以找到文件。 |
2)绝对路径和相对路径 | |
绝对路径 | 从“树形结构”的根节点开始描述,一直到叶子节点(即文件),这样的描述方式称为文件的“绝对路径”(absolute path)。在windows系统中,绝对路径从盘符开始描述。 |
相对路径 | 从指定的任意节点出发,该节点被称为“基准目录”。以该节点为基准,对文件进行描述,这样的描述方式称为“相对路径”(relative path)。想要得到相对路径,必须先明确基准目录。 |
3)相对路径的两个符号 | |
. | “ . ”号表示当前目录。 |
.. | “ .. ”号表示当前目录的上一级目录。 |
4)表示相对路径的示例 |
基准目录:D:/Test/A/ 相对路径(当前目录下的test1.txt文件):./test1.txt 相对路径(上级目录下,B文件夹中的test2.txt文件):../B/test2/txt |
三、文件类型
有哪些文件类型? | |
文本文件 | 文本文件是指保存合法字符的文件,字符以字符串形式保存。合法字符是指被字符集编码的文本,如“UTF-8”等字符集。 |
二进制文件 | 二进制文件是指文件保存的是二进制数据。 |
四、使用 File 类进行文件操作
在 Java 中,文件的操作分为两类 | |
操作文件系统 | 通过 File 类,在系统中进行增、删、查等操作。(下文介绍该类) |
操作文件内容 | 通过 流对象,在文件中读取或写入内容。 |
4.1 File 类中的 pathSeparator 属性
pathSeparator 属性是什么? |
不同的操作系统使用“/”或“\”作为目录分隔符,为使两种情况都能被成功识别,File 中使用了?pathSeparator 属性来对这两个符号做自适应。 |
4.2?File 类构造方法
File 类中常用的构造方法有以下三种 | |
public File(File parent, String child) | 根据父目录和子路径,创建新的 File 实例。 |
public File(String pathname) | 根据文件路径,创建新的 File 实例。路径可以是绝对或相对路径。 |
public File(String parent, String child) | 根据父目录和子路径,创建新的 File 实例。 |
4.3?File 类常用方法
File 类中有以下常用的方法 | |
public String getParent() | 返回 File 对象的父目录 |
public String getName() | 返回 File 对象的文件名 |
public String getPath() | 返回 File 对象的文件路径 |
public String getAbsolutePath() | 返回 File 对象的绝对路径 |
public String getCanonicalPath() | 返回 File 对象,修饰过的绝对路径 |
public boolean exists() | 判断? File 对象是否真实存在 |
public boolean isDirectory() | 判断 File 对象是否为目录 |
public boolean isFile() | 判断 File 对象是否为文件 |
public boolean createNewFile() | 创建新的 File 对象 |
public boolean delete() | 删除 File 对象 |
public void deleteOnExit() | 在进程结束后,删除?File 对象 |
public String[] list() | 返回 File 对象目录下的所有文件名 |
public File[] listFiles() | 返回 File 对象目录下的所有文件名 |
public boolean mkdirs() | 创建 File?对象的目录,包括中间目录 |
public boolean renameTo(File dest) | 修改文件名、文件路径;修改文件路径与剪切粘贴类似; |
public boolean canRead() | 判断是否对文件有可读权限 |
public boolean canWrite() | 判断是否对文件有可写权限 |
代码演示?getAbsolutePath() 和?getCanonicalPath() :
//文件的基准目录是"C:/Test/A"。
public static void main(String[] args) throws IOException {
File file = new File("./test.txt");
System.out.println("AbsolutePath-> "+file.getAbsolutePath());
System.out.println("CanonicalPath-> "+file.getCanonicalPath());
}
//运行结果:
AbsolutePath-> C:\Test\A\.\test.txt
CanonicalPath-> C:\Test\A\test.txt
可以看出AbsolutePath就是父目录和相对路径的字符串连接。
而CanonicalPath则是经过了修饰处理的。
代码演示?exists()、isDirectory()、isFile() 和 createNewFile() :
public static void main(String[] args){
File file = new File("C:/Test/A/test.txt");
System.out.println("文件是否存在:" + file.exists());
System.out.println("这是一个目录:" + file.isDirectory());
System.out.println("这是一个文件:" + file.isFile());
System.out.println("创建新文件:" + file.createNewFile());
}
//运行结果:
文件是否存在:false
这是一个目录:false
这是一个文件:true
创建新文件:true
可以看出,使用 File 构造方法时,传入的文件路径并不一定需要真实存在。
通过 exists() 可以判断文件是否真实存在。
通过 createNewFile() 可以创建出一个新文件,文件的路径与构造方法的参数相同。
代码演示?list() 和 listFiles() :
//目录"C:/Test"中,存在文件夹"A"、文件夹"B"和文件"Test.txt"。
public static void main(String[] args){
File f = new File("D:/Learn/E-JavaEE");
File[] files = f.listFiles();
for (File file : files){
System.out.println(file.getName());
}
}
//运行结果:
Test.txt
A
B
list() 和 listFiles() 用法相同,只是返回值不同。
list() 返回字符串数组。
listFiles() 返回文件数组。
代码演示?renameTo() :
public static void main6(String[] args) throws IOException {
File src = new File("D:/Test/A/test.txt");
File dest = new File("D:/Test/B/test1.txt");
System.out.println("重命名:" + src.renameTo(dest));
}
//运行结果:
重命名:true
可以看到,虽然方法名称为“重命名”,但是重命的可以不只是名,还可以是目录。
这就达成了剪切粘贴的效果。
阅读指针 -> 《文件IO -- 流对象操作文件内容》
链接生成中..........
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!