哈士奇发布文件File笔记

方法名称说明
public File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child)父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child)父抽象路径名和子路径名字符串创建新的 File实例。

举例  

public class FileDemo {
    public static void main(String[] args) {

        // 方式一:根据字符串表示的路径,变成File对象
        String str = "G:\\a.txt";
        File f1 = new File(str);
        System.out.println(f1);

        // 方式二:根据父级路径【G:\】和子级路径【a.txt】
        String parent = "G:\\";
        String child = "a.txt";
        File f2 = new File(parent, child);
        System.out.println(f2);

        // 方式三:把一个File表示的路径和字符串表示路径进行拼接
        File fileParent = new File("G:\\");
        String child2 = "a.txt";
        File f4 = new File(fileParent, child2);
        System.out.println(f4);

    }
}

1、File的常见成员方法(判断、获取)

方法名称说明
public boolean isDirectory()判断此路径名表示的File是否为文件夹
public boolean isFile()判断此路径名表示的File是否为文件
public boolean exists()判断此路径名表示的File是否存在
public long length()返回文件的大小(字节数量)【获取KB:获取大小/1024】
public String getAbsolutePath()返回文件的绝对路径
public String getPath()返回定义文件时使用的路径
public String getName()返回文件的名称,带后缀
public long lastModified()返回文件的最后修改时间(时间毫秒值)

2、File的常见成员方法(创建、删除)

方法名称说明
public boolean createNewFile()创建一个新的空的文件
public boolean mkdir()创建单级文件夹
public boolean mkdirs()创建多级文件夹
public boolean delete()删除文件、空文件夹

  • createNewFile

    • 如果当前路径表示的文件是不存在的,则创建成功,方法返回true

    • 如果当前路径表示的文件是存在的,则创建失败,方法返回false

    • 如果父级路径不存在,则抛出异常IOException

    • 创建的文件不一定有后缀

  • mkdir

    • windows 当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false

    • mkdir方法只能创建单级文件夹,无法创建多级文件夹

  • mkdirs

    • 既可以创建单级也可以创建多级,所以一般用mkdirs,但mkdirs底层用到了mkdir

  • delete

    • 如果删除的是文件,则直接删除,不走回收站

    • 如果删除的是空文件夹,则直接删除,不走回收站

    • 如果删除的有内容的文件夹,则删除失败

3、File的常见成员方法(获取并遍历)

方法名称说明
public File[] listFiles()获取当前该路径下所有内容【包括隐藏内容】

listFiles

  • 当调用者File表示的路径不存在时,返回null

  • 当调用者File表示的路径是文件时,返回null

  • 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组

  • 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回

  • 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包括隐藏文件

  • 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

方法名称说明
public static File[] listRoots()列出可用的文件系统根
public String[] list()获取当前该路径下所有内容
public String[] list(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles()获取当前该路径下所有内容 【掌握】
public File[] listFiles(FileFilter filter)利用文件名过滤器获取当前该路径下所有内容
public FIle[] listFiles(FilenameFilter filter)利用文件名过滤器获取当前该路径下所有内容

3.1、遍历硬盘查找文件

public class Test2 {
    public static void main(String[] args) {
        File file = new File("G:\\aaa");
        havaAVI(file);
    }

    public static void havaAVI(File file) {
        // 进入aaa 文件夹,而且要获取里面的所有内容
        File[] files = file.listFiles();
        // 遍历
        if (files != null) {
            for (File oldFile : files) {
                // 依次表示 files里面的每一个文件或文件夹路径
                if (oldFile.isFile()) {
                    String fileName = oldFile.getName();
                    if (fileName.endsWith(".doc")) {
                        System.out.println(oldFile);
                    }
                } else {
                    // 如果是一个文件夹,则继续循环遍历
                    havaAVI(oldFile);
                }
            }
        }
    }
}

3.2、删除文件夹

/**
* 删除文件夹
* @param file 要删除的文件夹
*/
public static void deleteFiles(File file) {
    // 得到所有文件
    File[] files = file.listFiles();
    // 遍历
    for (File oldFile : files) {
        if (oldFile.isFile()) {
            oldFile.delete();
        } else {
            deleteFiles(oldFile);
        }
    }
    file.delete();
}

3.3、统计文件夹大小

/**
     * 统计文件夹大小
     * @param file 要统计的文件夹
     * @return 返回大小
     */
public static long getLen(File file) {
    // 定义变量进行累加
    long len = 0;
    // 进入到file文件夹
    File[] files = file.listFiles();
    // 遍历数组
    for (File oldFile : files) {
        // 判断
        if (oldFile.isFile()) {
            // 把当前文件大小进行累加到 len
            len += oldFile.length();
        } else {
            // 如果是文件夹
            len += getLen(oldFile);
        }
    }
    return len;
}

3.4、统计文件夹下各种类型文件的个数

public static HashMap<String, Integer> getCount(File file) {
    File[] files = file.listFiles();
    HashMap<String, Integer> countMap = new HashMap<>();
    for (File f : files) {
        if (f.isFile()) {
            String fileName = f.getName();
            // 获取文件的尾部信息
            String[] arr = fileName.split("\\.");
            if (arr.length >= 2) {
                String endName = arr[arr.length - 1];
                if (countMap.containsKey(endName)) {
                    // 已存在
                    int count = countMap.get(endName);
                    count++;
                    countMap.put(endName, count);
                } else {
                    // 不存在
                    countMap.put(endName, 1);
                }
            }
        } else {
            // sonMap里面是子文件中每一种文件的个数
            HashMap<String, Integer> sonMap = getCount(f);
            // 遍历 sonMap 的键值对进行累加
            Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
            for (Map.Entry<String, Integer> entry : entries) {
                String key = entry.getKey();
                int value = entry.getValue();
                if (countMap.containsKey(key)) {
                    int countKey = countMap.get(key);
                    countKey = countKey + value;
                    countMap.put(key, countKey);
                } else {
                    countMap.put(key, value);
                }
            }
        }
    }
    return countMap;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值