File 类核心笔记

1. 基础定义

java.io.File文件 / 目录路径的抽象表示,不直接操作文件内容,仅用于路径、属性、文件 / 目录的创建 / 删除 / 遍历。

2. 构造方法

复制代码
// 方式1:直接传入路径(推荐)
File file = new File("D:/test/a.txt");
// 方式2:父路径+子路径
File file = new File("D:/test", "a.txt");
// 方式3:父File对象+子路径
File parent = new File("D:/test");
File file = new File(parent, "a.txt");

3. 常用方法(直接用)

(1)创建 / 删除
复制代码
File file = new File("D:/test/hello.txt");
File dir = new File("D:/test/aaa/bbb/ccc");
​
// 创建文件(不存在则创建,存在则返回false)
file.createNewFile();
// 创建多级目录(推荐,自动补全父目录)
dir.mkdirs();
// 删除文件/空目录(不走回收站,直接删除)
file.delete();
dir.delete();
(2)判断 / 获取属性
复制代码
File f = new File("D:/test/hello.txt");
​
// 存在性判断
boolean exists = f.exists();
// 判断是否是文件/目录
boolean isFile = f.isFile();
boolean isDir = f.isDirectory();
// 获取路径信息
String absPath = f.getAbsolutePath(); // 绝对路径
String name = f.getName(); // 文件名/目录名
long size = f.length(); // 文件大小(字节,目录返回0)File f = new File("D:/test/hello.txt");
​
// 存在性判断
boolean exists = f.exists();
// 判断是否是文件/目录
boolean isFile = f.isFile();
boolean isDir = f.isDirectory();
// 获取路径信息
String absPath = f.getAbsolutePath(); // 绝对路径
String name = f.getName(); // 文件名/目录名
long size = f.length(); // 文件大小(字节,目录返回0)
(3)遍历目录
复制代码
File dir = new File("D:/test");
// 获取目录下所有文件/子目录的File对象数组
File[] files = dir.listFiles();
// 遍历
if (files != null) { // 防止空指针(无权限/目录不存在)
    for (File file : files) {
        System.out.println(file.getName());
    }
}

二、递归核心笔记

1. 定义与三要素

  • 递归:方法自己调用自己

  • 三要素:

    1. 出口条件 :必须有,否则栈溢出(StackOverflowError

    2. 前进条件:每次调用向出口靠近,参数变化

    3. 返回条件:从出口处层层返回

2. 递归经典模板(可直接套用)

模板 1:遍历多级目录(打印所有文件路径)
复制代码
// 调用:listAllFiles(new File("D:/test"));
模板 2:删除非空目录
复制代码
public static void deleteDir(File dir) {
    // 先删除目录内所有内容
    File[] files = dir.listFiles();
    if (files != null) {
        for (File f : files) {
            if (f.isFile()) {
                f.delete(); // 直接删文件
            } else {
                deleteDir(f); // 递归删子目录
            }
        }
    }
    dir.delete(); // 目录变空后删除自身
}
// 调用:deleteDir(new File("D:/test/aaa"));
模板 3:统计目录下指定后缀文件(如.java)
复制代码
static int count = 0; // 计数器
​
public static void countJavaFile(File file) {
    if (file.isFile()) {
        if (file.getName().endsWith(".java")) {
            count++;
        }
        return;
    }
    File[] files = file.listFiles();
    if (files != null) {
        for (File f : files) {
            countJavaFile(f);
        }
    }
}
// 调用:
// countJavaFile(new File("D:/mycode"));
// System.out.println(count);
  1. 路径分隔符:跨平台写法 File.separator,Windows 中 \ 需转义为 \\

  2. listFiles() 可能返回 null,必须加非空判断

  3. delete() 直接删除,不走回收站,删除前务必确认

  4. length() 仅获取文件大小,目录返回值无实际意义

  5. 递归必须写出口条件,否则栈内存溢出

    import java.io.File;

    public class FileRecursionDemo {
    public static void main(String[] args) {
    File rootDir = new File("D:/test");

    复制代码
         // 1. 遍历所有文件路径
         System.out.println("=== 所有文件路径 ===");
         listAllFiles(rootDir);
         
         // 2. 统计Java文件数量
         System.out.println("\n=== Java文件数量 ===");
         countJavaFile(rootDir);
         System.out.println("Java文件总数:" + count);
     }


    // 遍历所有文件路径
    public static void listAllFiles(File file) {
    if (file.isFile()) {
    System.out.println(file.getAbsolutePath());
    return;
    }
    File[] files = file.listFiles();
    if (files != null) {
    for (File f : files) {
    listAllFiles(f);
    }
    }
    }

    // 统计Java文件数量
    static int count = 0;
    public static void countJavaFile(File file) {
    if (file.isFile()) {
    if (file.getName().endsWith(".java")) {
    count++;
    }
    return;
    }
    File[] files = file.listFiles();
    if (files != null) {
    for (File f : files) {
    countJavaFile(f);
    }
    }
    }
    }

相关推荐
.道阻且长.7 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
·薯条大王8 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
用户938515635078 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep8 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
鱼樱前端8 小时前
用 AI 做内容变收入
前端·人工智能·ai编程
浮生望9 小时前
React + TypeScript 组件设计进阶:从类型约束到无状态组件的三次进化
前端
To_OC9 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
90后的晨仔9 小时前
Mac 开发 uni-app 终极方案:让安卓模拟器彻底脱离 Android Studio 独立运行
前端·vue.js
90后的晨仔9 小时前
别再搞混了!uni-app 中 node_modules 和 uni_modules 到底是什么关系?
前端
kyriewen10 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试