博客
关于我
Java基础11-File类、递归
阅读量:619 次
发布时间:2019-03-13

本文共 4315 字,大约阅读时间需要 14 分钟。

File类与递归详解

1. File类

1.1 File类概述

File类是Java中用于管理文件和目录的抽象路径名表示,提供文件和目录的创建、查找及删除等功能。它能够处理本地文件系统中的文件和目录路径,构造方法灵活,能够根据不同需求选择操作方式。

1.2 构造方法

File类提供了多种构造方法,满足不同路径操作需求:

  • public File(String pathname):通过路径字符串创建File实例,适用于已知路径的情况。
  • public File(String parent, String child):从父路径和子路径创建实例,操作相对路径。
  • public File(File parent, String child):从父File对象和子路径创建新的实例,扩展了路径的维护方式。
  • 示例代码

    // 创建文件实例File file1 = new File("D:/aaa.txt");File file2 = new File("D:/aaa/bbb.txt");// 通过父路径和子路径创建File file3 = new File("D:/aaa", "bbb.txt");// 通过父File对象和子路径创建File parentDir = new File("D:/aaa");File file4 = new File(parentDir, "bbb.txt");

    小贴士:File对象可以代表实际存在的文件或目录,路径是否存在不影响对象的创建。无论是文件还是目录,File类都能提供统一的操作接口。


    2. 常用方法

    2.1 获取功能方法

  • public String getAbsolutePath():返回此File的绝对路径字符串。
  • public String getPath():返回此File的路径字符串,包含当前工作目录。
  • public String getName():返回文件或目录的名称。
  • public long length():返回file表示的文件长度。
  • 示例代码

    File f = new File("D:/aaa/bbb.java");System.out.println("绝对路径:" + f.getAbsolutePath());System.out.println("当前路径:" + f.getPath());System.out.println("文件名:" + f.getName());System.out.println("文件大小:" + f.length() + "字节");

    输出结果

    绝对路径:D:\aaa\bbb.java当前路径:D:\aaa\bbb.java文件名:bbb.java文件大小:636字节

    2.2 绝对路径 vs 相对路径

    • 绝对路径:从盘驱动符开始,完整无约定。
    • 相对路径:默认从当前项目根目录开始,便于开发参考。

    示例代码

    // 绝对路径File f = new File("D:/bbb.java");System.out.println(f.getAbsolutePath());// 相对路径File f2 = new File("bbb.java");System.out.println(f2.getAbsolutePath());

    输出结果

    D:\bbb.javaD:\idea_project_test4\bbb.java

    2.3 判断功能方法

  • public boolean exists():判断File表示的文件或目录是否存在。
  • public boolean isDirectory():判断是否为目录。
  • public boolean isFile():判断是否为文件。
  • 示例代码

    File f = new File("D:/aaa/bbb.java");File f2 = new File("D:/aaa");// 是否存在System.out.println("D:/aaa/bbb.java 是否存在:" + f.exists());System.out.println("D:/aaa 是否存在:" + f2.exists());// 是否是目录System.out.println("D:/aaa 文件?:" + f2.isFile());System.out.println("D:/aaa 目录?:" + f2.isDirectory());

    输出结果

    D:\aaa\bbb.java 是否存在:trueD:\aaa 是否存在:trueD:\aaa 文件?:falseD:\aaa 目录?:true

    3. 创建与删除功能

  • public boolean createNewFile():在文件不存在时创建空文件。
  • public boolean delete():删除文件或目录(目录必须为空)。
  • public boolean mkdir():创建目录。
  • public boolean mkdirs():创建目录及父目录(若不存在)。
  • 示例代码

    File f = new File("aaa.txt");// 创建文件System.out.println("是否存在:" + f.exists()); // falseSystem.out.println("是否创建:" + f.createNewFile()); // trueSystem.out.println("是否存在:" + f.exists()); // trueFile f2 = new File("newDir");// 创建目录System.out.println("是否存在:" + f2.exists()); // falseSystem.out.println("是否创建:" + f2.mkdir()); // trueSystem.out.println("是否存在:" + f2.exists()); // trueFile f3 = new File("newDira\\newDirb");System.out.println(f3.mkdir()); // falseFile f4 = new File("newDira\\newDirb");System.out.println(f4.mkdirs()); // true// 删除System.out.println(f.delete()); // trueSystem.out.println(f2.delete()); // trueSystem.out.println(f4.delete()); // false

    提示:删除目录时,需确保目录为空。


    4. 目录遍历

    4.1 方式一:列表方式

  • public String[] list():返回目录中的文件和目录名称数组。
  • public File[] listFiles():返回目录中的文件及其类型数组。
  • 示例代码

    File dir = new File("D:/java_code");String[] names = dir.list();for (String name : names) {    System.out.println(name);}File[] files = dir.listFiles();for (File file : files) {    System.out.println(file);}

    输出示例结果

    aaabbbca.c...(此处具体输出取决于目录结构)

    4.2 方式二:递归遍历

    对于多层目录,递归方法最为方便:

    示例代码

    File dir = new File("D:/ Files");printDir(dir);public static void printDir(File dir) {    File[] files = dir.listFiles();    for (File file : files) {        if (file.isFile()) {            System.out.println("文件:" + file.getAbsolutePath());        } else {            System.out.println("目录:" + file.getAbsolutePath());            printDir(file); // 递归调用        }    }}

    5. 递归示例

    5.1 线性递归

    递归加法求和

    public class DiGuiDemo {    public static void main(String[] args) {        int num = 5;        int sum = getSum(num);        System.out.println("1~" + num + "的和为:" + sum);    }    public static int getSum(int num) {        if (num == 1) {            return 1;        }        return num + getSum(num - 1);    }}

    输出结果:1+2+3+4+5=15


    5.2 二叉递归

    递归阶乘

    public class DiGuiDemo {    public static void main(String[] args) {        int n = 3;        int value = getValue(n);        System.out.println("3的阶乘为:" + value);    }    public static int getValue(int n) {        if (n == 1) {            return 1;        }        return n * getValue(n - 1);    }}

    输出结果:3×2×1=6


    通过合理使用File类的方法,可以有效管理文件和目录,灵活处理路径操作。与此同时,递归算法在编程中同样重要。无论是简单的累加求和,还是复杂的多级目录遍历,递归都能够提供灵活且简洁的解决方案。

    转载地址:http://cyuoz.baihongyu.com/

    你可能感兴趣的文章
    adb通过USB或wifi连接手机
    查看>>
    JDK9-15新特性
    查看>>
    TreeSet、TreeMap
    查看>>
    JVM内存模型
    查看>>
    可变长度参数
    查看>>
    3、条件查询
    查看>>
    cordova打包apk更改图标
    查看>>
    GitHub上传时,项目在已有文档时直接push出现错误解决方案
    查看>>
    文件系统的层次结构
    查看>>
    vue(渐进式前端框架)
    查看>>
    vscode设置eslint保存文件时自动修复eslint错误
    查看>>
    Remove Extra one 维护前缀最大最小值
    查看>>
    Linux操作系统的安装与使用
    查看>>
    C++ 继承 详解
    查看>>
    OSPF多区域
    查看>>
    Docker入门之-镜像(二)
    查看>>
    重置UAG Application admin密码
    查看>>
    嵌入式系统试题库(CSU)
    查看>>
    setup facatory9.0打包详细教程(含静默安装和卸载)
    查看>>
    java.security.InvalidKeyException: Illegal key size
    查看>>