Java – File文件
简介
File 对象表示一个路径,可以是文件路径、也可以是文件夹的路径,File 可以处理文件各种读写操作
构造函数
File 文件有三个基本构造函数分别如下
- // 通过字符串定义文件路径
- public File(String pathname);
-
- // 通过父路径加文件名定义文件路径
- public File(String parent, String child);
-
- // 通过带有父路径的File对象和文件名定义文件路径
- public File(File parent, String child)
File文件方法(判断和获取)
- // 判断此路径名表示的 File 是否为文件夹
- public boolean isDirectory();
-
- // 判断此路径名表示的File是否为文件
- public boolean isFile();
-
- // 判断File文件是否存在
- public boolean exists();
-
- // 返回文件的大小(字节数)
- public long length();
-
- // 返回文件的绝对路径
- public String getAbsolutePath();
-
- // 返回定义文件时使用的路径
- public String getPath();
-
- // 返回文件的名称,带后缀
- public String getName();
-
- // 返回文件的最后修改时间(毫秒)
- public long lastModified();
File文件方法(创建和删除)
- // 创建一个新的空文件
- public boolean createNewFile();
- // 如果当前路径文件的文件是存在的,则在创建失败返回 false
- // 当父级路径文件夹不存在,会抛出IO异常
-
- // 创建单级文件夹
- public boolean mkdir();
-
- // 创建多级文件夹
- public boolean mkdirs();
-
- // 删除文件、空文件夹
- public boolean delete();
- // delete 方法默认只能删除文件和空文件夹,delete 方法直接删除不走回收站
- // 如果删除的是有内容的文件夹,则删除失败
-
删除有内容的文件夹(包括多级文件夹)
如果我们要删除一个有内容的文件夹:
1.先删除文件夹里面所有的内容
2.再删除自己
- public static void delete(File path){
- File[] files = path.listFiles();
- for (File file : files) {
- if (file.isFile()){
- file.delete();
- }else {
- delete(file);
- }
- }
- // 最后再删除自己
- path.delete();
- }
File文件方法(获取和遍历)
- // 获取当前该路径下所有内容
- public File[] listFiles()
注意:
1.当调用者File表示的路径不存在时,返回 null
2.当调用者File表示的路径是文件时,返回 null
3.当调用者File表示的路径是一个空文件夹时,返回一个长度为0的File数组
4.当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径方在File数组中返回
5.当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径方在File数组中返回,包含隐藏文件
6.当调用者File表示的路径是需要权限才能访问的文件夹时,返回 null
其它遍历方法
- // 列出可用的文件系统根
- public static File[] listRoots();
-
- // 获取当前该路径下所有内容(仅获取文件名或文件夹名)
- public String[] list();
-
- // 利用文件名过滤器获取当前该路径下所有内容
- public String[] list(FilenameFilter filter);
- // FilenameFilter 是一个接口,有一个函数式实现方法 accept
- // 可以通过自定义的方式对遍历的文件进行过滤,返回 true 表示保留,false表示舍弃
-
- // 获取当前该路径下所有内容
- public File[] listFiles();
-
- // 利用文件名过滤器获取当前该路径下所有内容
- public File[] listFiles(FileFilter filter);
- // FileFilter 是一个接口,有一个函数式实现方法 accept
- // 可以通过自定义的方式对遍历的文件进行过滤,返回 true 表示保留,false表示舍弃
-
- // 利用文件名过滤器获取当前该路径下所有内容
- public File[] listFiles(FilenameFilter filter);
FileFilter 和 FilenameFilter 的区别在于接口回调方法中,FilenameFilter 接收的是 File对象,包含总路径,而FileFilter 只接收文件名。
示例:遍历文件
- public static void main(String[] args) {
- File f = new File("E:\\");
- getAllFilesFromPath(f, "mp4");
- }
-
- public static void getAllFilesFromPath(File path, String suffix) {
- File[] files = path.listFiles();
- if (files != null) {
- for (File file : files) {
- if (file.isFile()) {
- // 如果是文件
- if (file.getName().endsWith(suffix)) {
- System.out.println(file.getAbsoluteFile());
- }
- } else {
- // 如果不是文件,那就是文件夹
- getAllFilesFromPath(file, suffix);
- }
- }
- }
-
- }
统计文件类型数
- public static Map<String, Integer> getDirFilesCount(File path) {
- File[] files = path.listFiles();
- HashMap<String, Integer> hm = new HashMap<>();
-
- for (File file : files) {
- if (file.isFile()) {
- // 如果是文件
- String[] fileSuffixs = file.getName().split("\\.");
- String fileSuffix = fileSuffixs[fileSuffixs.length - 1];
- if (hm.containsKey(fileSuffix)) {
- // 存在这个类
- int count = hm.get(fileSuffix);
- hm.put(fileSuffix, ++count);
- } else {
- // 不存在这个类
- hm.put(fileSuffix, 1);
- }
-
- } else {
- // 如果是文件夹
- Map<String, Integer> sonMap = getDirFilesCount(file);
- Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
- for (Map.Entry<String, Integer> entry : entries) {
- if (hm.containsKey(entry.getKey())) {
- Integer srcInt = hm.get(entry.getKey());
- srcInt += entry.getValue();
- hm.put(entry.getKey(), srcInt);
- } else {
- hm.put(entry.getKey(), 1);
- }
- }
- }
- }
- return hm;
- }


共有 0 条评论