- 1. File 类
1. File 类
File
类是文件和目录路径名的抽象表示形式.File
类是IO
包中唯一表示磁盘文件和磁盘目录的对象的路径.该类包含了创建, 删除文件, 重命名文件, 判断文件读写权限
以及文件是否存在, 查询等功能方法.只能设置和获取文件本身的信息, 不能设置和获取文件的内容.
若要对文件内容进行操作, 需要用到IO
操作.
1.1. UNIX 和 Windows 间的文件系统区别
对于文件名来说
- Unix: 严格区分大小写.
- WIndows: 默认情况下是不区分大小写的.
对于目录名称分隔符, 路径分隔符来说:
- Unix:
- 使用
/
来分割目录名称. - 使用
:
来分割文件路径.
- 使用
- Windows:
- 使用
\
来分割目录名称. 但是在 Java 中一个\
表示转义;
在 Windows 平台的 Java 代码中表示一个目录名称, 就得使用两个\\
. 但是 Windows 也支持使用/
来分割目录名称. - 使用
;
来分割文件路径.
- 使用
- Unix:
1.1.1. 消除文件系统差异的解决方案
JAVA 中定义了路径分隔符和属性分隔符的常量, 可以直接调用获取, 不必区分系统.
目录名称分隔符常量:
- separator: 表示字符串
\\
或/
- separatorChar: 表示
char
类型的\\
或/
- separator: 表示字符串
文件路径分隔符:
- SeparatorChar: 表示字符串
;
或:
- pathSeparatorChar: 表示
char
类型的;
或:
- SeparatorChar: 表示字符串
1.2. File 构造器
下面列举出 3 种
File
类中常用的构造器, 本质上其实可以看作字符串拼接.方法1:
File(String pathname)
- 通过将给定路径名字符串转换为抽象路径名来创建一个新
File
实例
方法2:
File(String parent, String child)
- 根据
parent
路径名字符串和child
路径名字符串创建一个新File
实例
方法3:
File(File parent, String child)
- 根据
parent
抽象路径名和child
路径名字符串创建一个新File
实例
注意:
这三种方法, 如果只填入文件名称或相对, 则生成的路径是项目默认路径再加文件名.
1.2.1. 创建 File 对象实例
//创建F11e对象, 以下三种方式打印效果都是一样的
File f1 = new File ("C:/abc/123.txt");
File f2 = new File ("C:/abc", "123.txt");
File dir = new File ("C:/abc");
File f3 = new File (dir, "123.txt");
1.3. 操作 File 路径和名称的方法
- 创建一个
File
实例, 供以下方法展示使用//创建F11e对象 File f1 = new File ("C:/abc/123.txt");
1.3.1. 获取绝对路径
两个方法区别只是在于返回类型不一样
File getAbsoluteFile()
String getAbsolutePath()
实例:
//以下打印结果都是 C:/abc/123.txt System.out.println(f1.getAbsoluteFile()); System.out.println(f1.getAbsolutePath());
1.3.2. 获取文件路径
String getPath()
- 调用输出结果为
C:/abc/123.txt
1.3.3. 获取文件名称
String getName()
- 调用输出结果为
123.txt
1.3.4. 获取上级目录文件
File getParentFile()
- 调用输出结果为
C:/abc
- 注意:
该方法是获取上级文件夹这个文件, 即示例中abc
这个文件夹文件
1.3.5. 获取上级目录路径
String getParent()
- 调用输出结果为
C:/abc
- 注意:
该仅仅返回字符串路径, 尽管和上面方法输出结果相同, 但方法返回结果是不一样的
1.4. 检测 File 状态和属性的方法
- 判断状态的时候如果文件不存在, 都会返回
false
- 以下
执行/读/写/最后修改时间
四个状态, 都有对应的set
方法可以对其进行修改设置.
1.4.1. 判断是否是可执行文件
boolean canExecute()
1.4.2. 判断该文件是否可读
boolean canRead()
1.4.3. 判断该文件是否可写
boolean canWrite()
1.4.4. 获取该文件的最后修改时间
long lastModiried()
1.4.5. 判断该文件是否是隐藏文件
boolean isHidden()
1.4.6. 获取该文件的长度大小(单位是字节)
long length()
1.5. File 类中操作文件的方法
1.5.1. 判断文件是否存在
boolean exists()
1.5.2. 判断是否是文件
boolean isFile()
1.5.3. 创建新的文件
- 当且仅当
File
对象所对应的文件路径下的文件不存在的情况下,
创建一个该文件路径的文件. boolean createNewfile()
1.5.4. 创建临时文件
static File createTempFile(String prefix, String suffix, File directory)
- 该方法是静态方法, 可以直接使用类名来调用.
prefix
表示文件名称前缀,suffix
表示文件后缀,directory
表示存储路径
1.5.5. 删除文件
boolean delete()
1.5.6. 在 JVM 停止时再删除文件
void deleteOnExit()
1.5.7. 重新修改名称
boolean renameTo(File dest)
- 该方法修改的内容包括文件的路径和文件名
- 若只想移动文件位置, 可以保持文件的名字, 只改变文件的目录路径
- 若只想给文件改名, 可以保持文件目录路径不变, 只改名字
- 两者都改变则会在新的文件目录路径下出现新名字的文件, 旧目录下的文件会消失
1.6. File 类中操作文件目录方法
1.6.1. 判断是否是目录
boolean isDirectory()
1.6.2. 创建当前目录
boolean mkdir()
- 该方法只能创建一级目录, 不能创建多级目录
1.6.3. 创建当前目录和上级目录
boolean mkdirs()
- 该方法用来创建多级目录
1.6.4. 列出所有的文件名
String[] list()
- 返回一个字符串数组, 这些字符串指定此抽象路径名表示的目录中的文件和目录
1.6.5. 列出所有文件对象
File[] listFiles()
- 返回一个抽象路径名数组, 这些路径名表示此抽象路径名表示的目录中的文件
1.6.6. 列出系统盘符
static File listRoots()
- 该方法是静态方法, 可以用来列出可用的文件系统根, 即系统盘符
1.7. FilenameFilter 文件过滤器
这个是一个接口, 需要自己实现内部的判断方法, 通常用匿名内部类实现.
该接口可通过自定义规则在指定目录下去根据文件的名称过滤筛选文件.
该接口主要用于
String[] list(FilenameFilter filter)
和File[] listFiles(FilenameFilter filter)
方法当中,
如果符合过滤器规则, 则收录进数组当中, 否则略过不收录.
1.7.1. 内置的默认实现方法
boolean accept(File dir, String name){
return false;
}
- 参数:
dir
- 被找到的文件所在的目录name
- 文件的名称
- 返回:
- 当且仅当该名称应该包含在文件列表中时返回
true
; 否则返回false
.
- 当且仅当该名称应该包含在文件列表中时返回