【Java】File 类

news/2025/2/23 6:18:08

目录

  • File 类
    • File 类构造方法
    • 常见成员方法
      • 判断与获取
      • 创建与删除
      • 获取并遍历

File 类

  • File 对象表示一个路径,可以是文件的路径,也可以是文件夹的路径

  • 这个路径可以是存在的,也允许是不存在的

  • 绝对路径和相对路径的区别:

    • 绝对路径是指从根目录开始描述文件或目录位置的完整路径。无论你在系统中的哪个位置,使用绝对路径都能准确定位到目标资源。例如,在Windows操作系统中,C:\Users\username\Documents\example.txt 就是一个绝对路径;而在Linux或macOS系统中, /home/username/Documents/example.txt 则表示同样的含义。

    • 相对路径则是相对于当前工作目录的位置来描述文件或目录的路径。它不包含盘符(如 C:),也不一定从根目录开始。其有效性依赖于你所在的当前位置。比如如果你现在位于 D:\Projects 文件夹下,那么你可以用 .\myproject\src\main.cpp 来指代同级目录下的某个项目源码文件。

    • 简单来说:

      • 绝对路径总是能够唯一标识出一个具体的文件或文件夹,并且不会因为环境变化而改变;

      • 相对路径更短小精悍,但需要结合上下文理解,并随所在位置的不同会有差异。

File 类构造方法

  • public File(String pathname) 根据文件路径创建文件对象
  • public File(String parent,String child) 根据父路径名字符串和子路径名字符串创建文件对象(拼接)
  • public File(File parent,String child) 根据父路径对应文件对象和子路径名字符串创建文件对象(拼接)
java">import java.io.File;

public class FileDemo {
	public static void main(String[] args) {
		// 根据文件路径创建文件对象
		String str = "C:\\Users\\abcd\\Desktop\\输入输出.md";
		File f1 = new File(str);
		System.out.println(f1);
		
		// 根据父路径名字符串和子路径名字符串创建文件对象
		String parent = "C:\\Users\\abcd\\Desktop";
		String child = "输入输出.md";
		File f2 = new File(parent,child);
		System.out.println(f2);
		
		// 根据父路径对应文件对象和子路径名字符串创建文件对象
		File parent2 = new File("C:\\Users\\abcd\\Desktop");
		String child2 = "输入输出.md";
		File f3 = new File(parent2,child2);
		System.out.println(f3);
	}
}

常见成员方法

判断与获取

  • public boolean isDirectory() 判断此路径名表示的 File 是否为文件夹
  • public boolean isFile() 判断此路径名的 File 是否为文件
  • public boolean exists() 判断此路径名表示的 File 是否存在
  • public long length() 返回文件的大小(字节数量)
  • public String getAbsolutePath() 返回文件的绝对路径
  • public String getPath() 返回定义文件时使用的路径
  • public String getName() 返回文件的名称,带后缀
  • public long lastModified() 返回文件的最后修改时间(时间毫秒值)
java">import java.io.File;

public class FileOperations {
    public static void main(String[] args) {
        // 创建一个File对象,这里以项目根目录下的test.txt文件为例,可按需修改路径
        File file = new File("C:\\Users\\abcd\\Desktop\\输入输出.md");

        // 判断是否为文件夹
        boolean isDirectory = file.isDirectory();
        System.out.println("Is directory: " + isDirectory);

        // 判断是否为文件
        boolean isFile = file.isFile();
        System.out.println("Is file: " + isFile);

        // 判断是否存在
        boolean exists = file.exists();
        System.out.println("Exists: " + exists);

        // 获取文件大小(字节数),如果是文件夹此方法返回0
        long length = file.length();
        System.out.println("File size (bytes): " + length);

        // 获取绝对路径
        String absolutePath = file.getAbsolutePath();
        System.out.println("Absolute path: " + absolutePath);

        // 获取定义文件时使用的路径
        String path = file.getPath();
        System.out.println("Defined path: " + path);

        // 获取文件名称,带后缀
        String name = file.getName();
        System.out.println("File name: " + name);

        // 获取文件的最后修改时间(时间毫秒值)
        long lastModified = file.lastModified();
        System.out.println("Last modified time (milliseconds): " + lastModified);
    }
}

输出结果如下:

java">Is directory: false
Is file: true
Exists: true
File size (bytes): 4496
Absolute path: C:\Users\abcd\Desktop\输入输出.md
Defined path: C:\Users\abcd\Desktop\输入输出.md
File name: 输入输出.md
Last modified time (milliseconds): 1740232832244

创建与删除

  • public boolean createNewFile() 创建一个新的空的文件

  • public boolean mkdir() 创建单级文件夹

  • public boolean mkdirs 创建多级文件夹

  • public boolean delete() 删除文件、空文件夹(直接删除、不进入回收站)

java">import java.io.File;
import java.io.IOException;

public class FileCreateAndDeleteExample {
    public static void main(String[] args) {
        // 示例路径,可根据实际情况修改
        String filePath = "test.txt";
        String singleDirPath = "singleDir";
        String multiDirPath = "parentDir\\childDir";

        // 创建新文件
        File file = new File(filePath);
        try {
            if (file.createNewFile()) {
                System.out.println("文件 " + filePath + " 创建成功");
            } else {
                System.out.println("文件 " + filePath + " 已存在");
            }
        } catch (IOException e) {
            System.out.println("创建文件时出错: " + e.getMessage());
        }

        // 创建单级文件夹
        File singleDir = new File(singleDirPath);
        if (singleDir.mkdir()) {
            System.out.println("单级文件夹 " + singleDirPath + " 创建成功");
        } else {
            System.out.println("单级文件夹 " + singleDirPath + " 创建失败或已存在");
        }

        // 创建多级文件夹
        File multiDir = new File(multiDirPath);
        if (multiDir.mkdirs()) {
            System.out.println("多级文件夹 " + multiDirPath + " 创建成功");
        } else {
            System.out.println("多级文件夹 " + multiDirPath + " 创建失败或已存在");
        }

        // 删除文件
        if (file.delete()) {
            System.out.println("文件 " + filePath + " 删除成功");
        } else {
            System.out.println("文件 " + filePath + " 删除失败");
        }

        // 删除单级文件夹,注意:文件夹必须为空才能删除成功
        if (singleDir.delete()) {
            System.out.println("单级文件夹 " + singleDirPath + " 删除成功");
        } else {
            System.out.println("单级文件夹 " + singleDirPath + " 删除失败");
        }

        // 删除多级文件夹,同样要求各级文件夹为空
        if (multiDir.delete()) {
            System.out.println("多级文件夹 " + multiDirPath + " 删除成功");
        } else {
            System.out.println("多级文件夹 " + multiDirPath + " 删除失败");
        }
    }
}

注意事项

  • createNewFile():
    • 如果当前路径表示的文件原本是不存在的,则创建成功并返回 true
    • 如果当前路径表示的文件原本是存在的,则创建失败并返回 false
    • 如果父路径是不存在的,那么方法会有 IOException 异常
    • 创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件
  • mkdir():Windows 当中路径是唯一的,如果当前路径已经存在,则创建失败并返回 false
  • mkdir():既可以创建单级文件夹,又可以创建多级文件夹
  • delete():
    • 如果删除的是文件,直接删除,不进入回收站
    • 如果删除的是空文件夹,直接删除,不进入回收站
    • 如果删除的是有内容的文件夹,则删除失败

获取并遍历

  • public File[] listFiles() 获取当前该路径下所有内容
java">import java.io.File;

public class ListFilesExample {
    public static void main(String[] args) {
        // 指定要遍历的目录路径,可以根据需要修改
        File directory = new File("MyFiles");

        // 检查该 File 对象是否代表一个目录
        if (directory.isDirectory()) {
            // 调用 listFiles() 方法获取目录下的所有文件和子目录
            File[] files = directory.listFiles();

            // 检查返回的数组是否为空
            if (files != null) {
                // 遍历数组并输出每个文件或目录的名称
                for (File file : files) {
                    if (file.isDirectory()) {
                        System.out.println("目录: " + file.getName());
                    } else {
                        System.out.println("文件: " + file.getName());
                    }
                }
            } else {
                System.out.println("无法获取目录内容,可能发生 I/O 错误。");
            }
        } else {
            System.out.println("指定的路径不是一个目录。");
        }
    }
}

注意事项

  • 当调用者 File 表示的路径不存在时,返回 null
  • 当调用者 File 表示的路径是文件时,返回 null
  • 当调用者 File 表示的路径是一个空文件夹时,返回一个长度为 0 的数组
  • 当调用者 File 表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回
  • 当调用者 File 表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在 File 数组中返回,包含隐藏文件
  • 当调用者 File 表示的路径是需要权限才能访问的文件夹时,返回 null

http://www.niftyadmin.cn/n/5863095.html

相关文章

Redis实战篇《黑马点评》5

5.秒杀优化 5.1异步秒杀思路 我们先来回顾一下下单流程 当用户发起请求,此时会先请求Nginx,Nginx反向代理到Tomcat,而Tomcat中的程序,会进行串行操作,分为如下几个步骤 查询优惠券判断秒杀库存是否足够查询订单校验是…

OpenAI 周活用户破 4 亿,GPT-4.5 或下周发布,微软加紧扩容服务器

导语: OpenAI 近期用户增长迅猛,其下一代 AI 模型 GPT-4.5 和 GPT-5 的发布也日益临近。微软作为 OpenAI 的重要合作伙伴,正积极扩充服务器容量,为新模型的到来做好准备。 OpenAI 首席运营官布拉德莱特卡普(Brad Lig…

Chrome 浏览器(版本号49之后)‌解决跨域问题

谷歌浏览器解决跨域问题 如何查看 Chrome 浏览器版本号 打开 Chrome 浏览器点击右上角的三个点,打开“设置”页面 点击“关于Chrome” 查看版本号 解决跨域操作:windows系统为例 方法一:命令行启动方式(最简单) …

20250220-代码笔记01-class CVRPEnv

文章目录 前言一、def __init__(self, **env_params):函数功能函数代码 二、use_saved_problems(self, filename, device)函数功能函数代码 三、load_problems(self, batch_size, aug_factor1)函数功能函数代码use_saved_problems 与 load_problems 之间的关系 四、…

安装Liunx(CentOS-6-x86_64)系统

一:下载与安装Liunx(CentOS-7-x86_64) 1.下载: CentOS-6.10-x86_64-bin-DVD1.iso 2.安装: 按照自己的需求来 下载的镜像文件地址 加载完成后设置 查看网络和本地ip 3.配置仓库(用于yum下载&#xff0…

CNN 卷积神经网络【更新中】

前置基础知识 convolution operator 卷积运算 输入矩阵循环取子矩阵跟filter(kernal)按位乘后加和作为输出矩阵对应位置的值。 convolution与cross correlation 上面操作实际是cross correlation操作,两者之间的唯一区别是卷积操作需要在开始计算之前将卷积核进行…

异步联邦学习的动态隐私保护框架:重构边缘智能的数据安全边界

引言:数据隐私与模型效能的平衡之困 某跨国医疗联盟采用异步定向联邦框架后,在联合训练肺部CT分割模型时实现了97.3%的隐私保护率,同时模型性能仅下降0.8%。通过在112家医院节点部署动态差分隐私机制,该方案将传统联邦学习的通信…

OpenCV 4.10.0 图像处理基础入门教程

一、OpenCV基础架构与开发环境 1.1 OpenCV核心模块解析 OpenCV 4.10.0延续了模块化架构设计,核心模块包含: Core:提供基础数据结构(如Mat)和基本运算Imgcodecs:独立图像编解码模块Videoio:视…