File类
不提供代码,希望大家动动手指敲敲代码!
学习IO流前先掌握File类,该类主要用于文件和目录的创建、文件的查找和文件的删除等
静态成员变量
字段 | 字段作用 |
---|---|
public static final String pathSeparator | 与系统有关的路径分隔符,为了方便,它被表示为一个字串, window : " ; " Linux : " : " |
public static final char pathSeparatorChar | 与系统有关的路径分隔符,window : ’ ; ’ Linux : ’ : ’ |
public static final String separator | 与系统有关的默认名称分隔符,为了方便,它被表示为一个字串,window : " \ " Linux : " / " |
public static final char separatorChar | 与系统有关的默认名称分隔符,window : ’ \ ’ Linux : ’ / ’ |
注意点:
- Window、Linux系统的路径分隔符、名称分隔符都不一样
- 路径分隔符:
- Window:’ ; '(分号)
- Linux:’ : '(冒号)
- 名称分隔符:
- Window:’ \ '(反斜杠)
- Linux:’ / '(正斜杠)
- 路径分隔符:
构造方法
构造方法 | 构造方法的作用 |
---|---|
public File(String pathname) | 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例 |
public File(String parent, String child) | 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例 |
public File(File parent, String child) | 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例 |
public File(URI uri) | 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例 |
注意点:
-
路径可以以文件结尾,也可以以文件夹结尾
-
路径可以是相对路径(相对项目位置),也可以是绝对路径
-
路径可以是不存在的,创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况
-
’ \ '是转义字符,所以需要双反斜杠( \ \ )来表示 ’ \ ’
常用方法
获取功能的方法
方法 | 方法作用 |
---|---|
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串。如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样。如果此抽象路径名是空抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性 user.dir 指定。否则,使用与系统有关的方式解析此路径名。 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。 |
public String getPath() | 将此抽象路径名转换为一个路径名字符串。所得字符串使用默认名称分隔符分隔名称序列中的名称。 |
public long length() | 返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是0。单位是字节。 |
注意点:
- toString方法调用的就是getPath方法
- 如果构造方法中给的路径不存在,那么length方法返回0
判断功能的方法
方法 | 方法作用 |
---|---|
public boolean exists() | 测试此抽象路径名表示的文件或目录是否存在。 |
public boolean isDirectory() | 测试此抽象路径名表示的文件是否是一个目录。 |
public boolean isFile() | 测试此抽象路径名表示的文件是否是一个标准文件。如果该文件不是一个目录,并且满足其他与系统有关的标准,那么该文件是标准 文件。由 Java 应用程序创建的所有非目录文件一定是标准文件。 |
注意点:
- 只要路径不存在,都是返回false
创建删除功能的方法
方法 | 方法的作用 |
---|---|
public boolean createNewFile() | 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。检查文件是否存在,若不存在则创建该文件,这是单个操作,对于其他所有可能影响该文件的文件系统活动来说,该操作是不可分的。如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false。 |
public boolean delete() | 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。当且仅当成功删除文件或目录时,返回 true;否则返回 false。 |
public boolean mkdir() | 创建此抽象路径名指定的目录。当且仅当已创建目录时,返回 true;否则返回 false。 |
public boolean mkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。当且仅当已创建目录以及所有必需的父目录时,返回 true;否则返回 false。 |
注意点:
- 文件的删除,不经过回收站,所以删除要谨慎!
- delete删除操作只能删除单个文件和空的目录。如果用来删除包含多个文件或子目录的非空目录就会删除失败,所以就有了递归的方法。
过滤器的使用
方法 | 方法的作用 | 参数(接口) |
---|---|---|
public File[] listFiles(FileFilter filter) | 返回抽象路径名数组,路径名表示满足指定过滤器的文件和目录。 | 文件过滤器 |
public File[] listFiles(FilenameFilter filter) | 返回抽象路径名数组,路径名表示满足指定过滤器的文件和目录。 | 文件名过滤器 |
执行流程:
案列
删除多级目录中的文件和目录
//如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个字符串数组,每个数组元素对应目录中的每个文件或目录。
//表示目录本身及其父目录的名称不包括在结果中。不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。
//返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
//每个字符串是一个文件名,而不是一条完整路径。
public String[] list()
//返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
//得到的每个抽象路径名都是根据此抽象路径名,使用 File(File, String) 构造方法构造的。
//所以,如果此路径名是绝对路径名,那么得到的每个路径名都是绝对路径名;如果此路径名是相对路径名,那么得到的每个路径名都是相对于同一目录的路径名。
public File[] listFiles()
注意点:
- 传入的路径必须存在,不然遍历的时候就出现空指针异常
Exception in thread "main"java.lang.NullPointerException
批量修改文件名
//当且仅当此字符串包含指定的 char 值序列时,返回 true。如果此字符串包含 s,则返回 true,否则返回 false
public boolean contains(CharSequence s)
//返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
public String replace(char oldChar,char newChar);
//重新命名此抽象路径名表示的文件。如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功。
//应该始终检查返回值,以确保重命名操作成功。
public boolean renameTo(File dest)
列出文件的分层结构(菜单结构)
//返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
public File getParentFile();
//Collections类中的reverse()方法
//reverse():反转指定列表中元素的顺序。
public static void reverse(List<?> list)
//StringBuilder类:一个可变的字符序列
//将指定的 StringBuffer 追加到此序列。
//按顺序追加 StringBuffer 参数中的字符,此序列将增加该参数的长度。如果 sb 为 null,则向该序列中追加 4 个 "null" 字符。
public StringBuilder append(StringBuffer sb)
//移除此序列指定位置上的 char。此序列将缩短一个 char。
public StringBuilder deleteCharAt(int index)
多级目录中,过滤文件中批量删除指定文件、批量修改指定文件名(综合)
//endsWith() 方法用于测试字符串是否以指定的后缀结束。
public boolean endsWith(String suffix)
//返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。(除了返回数组中的路径名必须满足过滤器外,此方法的行为与 listFiles() 方法相同。如果给定 filter 为 null,则接受所有路径名。否则,当且仅当在路径名上调用过滤器的 FileFilter.accept(java.io.File) 方法返回 true 时,该路径名才满足过滤器。)
public File[] listFiles(FileFilter filter)
//接口:
public interface FileFilter
//方法:测试指定抽象路径名是否应该包含在某个路径名列表中。
boolean accept(File pathname)
//接口:
public interface FilenameFilter
//方法:测试指定文件是否应该包含在某一文件列表中。
//dir - 被找到的文件所在的目录。
//name - 文件的名称。
boolean accept(File dir,String name)
需求:
删除目录及子目录中后缀为txt的文件。
修改后缀为java的文件,把文件名称中的hao-去掉。
项目的根目录有个FileTest目录
FileTest --> 文件:01.txt 01.java hao-02java 目录:新建文件夹
新建文件夹 --> 文件:03.txt hao-03.java
预期结果:
FileTest --> 文件:01.java 02java 目录:新建文件夹
新建文件夹 --> 文件:03.java