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;
  • }
展开

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
<<上一篇
下一篇>>