当前位置: 首页 > article >正文

Java-File类基本方法使用指南

Java-File类基本方法使用指南

    • 一、File类基础概念
      • 1.1 什么是File类
      • 1.2 File类的构造函数
    • 二、文件和目录的创建与删除
      • 2.1 创建文件 - createNewFile()
      • 2.2 创建目录 - mkdir() 和 mkdirs()
      • 2.3 删除文件或目录 - delete()
    • 三、文件和目录的查询与判断
      • 3.1 存在性判断 - exists()
      • 3.2 类型判断 - isFile() 和 isDirectory()
      • 3.3 可读性、可写性和可执行性判断
      • 3.4 获取文件或目录的属性
    • 四、目录内容遍历
      • 4.1 list() 方法
      • 4.2 listFiles() 方法
      • 4.3 使用文件过滤器
    • 五、路径操作
      • 5.1 重命名和移动文件 - renameTo()
      • 5.2 检查路径是否为绝对路径 - isAbsolute()
    • 六、实战案例
      • 6.1 递归删除目录
      • 6.2 统计目录大小
      • 6.3 文件搜索工具
    • 七、注意事项与常见问题
    • 总结

Java中java.io.File类是处理文件和目录的核心类之一,它提供了丰富的方法来操作文件系统,包括文件和目录的创建、删除、查询以及路径操作等。本文我将介绍一些File类的基本常用方法,并结合实际案例展示其应用场景,帮你更好地掌握文件操作技能。

一、File类基础概念

1.1 什么是File类

java.io.File类是Java中用于表示文件和目录路径名的抽象表示。它不直接处理文件内容,而是专注于文件和目录的创建、删除、查询以及路径信息的获取等操作。通过File类,开发者可以:

  • 创建新文件或目录
  • 删除文件或目录
  • 查询文件或目录的属性(如大小、修改时间等)
  • 遍历目录内容
  • 操作文件和目录的路径

1.2 File类的构造函数

File类提供了多个构造函数,常用的有以下几种:

  • File(String pathname):通过指定的路径名字符串创建File对象。
File file = new File("C:/temp/test.txt");
  • File(String parent, String child):根据父路径和子路径名创建File对象。
File dir = new File("C:/temp");
File file = new File(dir, "test.txt");
  • File(File parent, String child):根据父File对象和子路径名创建File对象。
File dir = new File("C:/temp");
File file = new File(dir, "test.txt");

二、文件和目录的创建与删除

2.1 创建文件 - createNewFile()

createNewFile()方法用于创建文件,如果文件不存在且创建成功返回true,如果文件已存在则返回false。若创建过程中出现IO异常,会抛出IOException

import java.io.File;
import java.io.IOException;public class CreateFileExample {public static void main(String[] args) {File file = new File("C:/temp/newfile.txt");try {if (file.createNewFile()) {System.out.println("文件创建成功");} else {System.out.println("文件已存在");}} catch (IOException e) {System.out.println("创建文件时出错: " + e.getMessage());}}
}

2.2 创建目录 - mkdir() 和 mkdirs()

  • mkdir():创建单级目录,如果父目录不存在则创建失败。
File dir = new File("C:/temp/newdir");
if (dir.mkdir()) {System.out.println("目录创建成功");
} else {System.out.println("目录创建失败,可能父目录不存在");
}
  • mkdirs():创建多级目录,如果父目录不存在会自动创建。
File dir = new File("C:/temp/subdir1/subdir2");
if (dir.mkdirs()) {System.out.println("多级目录创建成功");
} else {System.out.println("多级目录创建失败");
}

2.3 删除文件或目录 - delete()

delete()方法用于删除文件或目录。删除目录时,目录必须为空,否则删除失败。

// 删除文件
File file = new File("C:/temp/test.txt");
if (file.delete()) {System.out.println("文件删除成功");
} else {System.out.println("文件删除失败");
}// 删除目录
File dir = new File("C:/temp/emptydir");
if (dir.delete()) {System.out.println("目录删除成功");
} else {System.out.println("目录删除失败,可能目录不为空");
}

三、文件和目录的查询与判断

3.1 存在性判断 - exists()

exists()方法用于判断文件或目录是否存在。

File file = new File("C:/temp/test.txt");
if (file.exists()) {System.out.println("文件存在");
} else {System.out.println("文件不存在");
}

3.2 类型判断 - isFile() 和 isDirectory()

  • isFile():判断是否为文件。
  • isDirectory():判断是否为目录。
File file = new File("C:/temp/test.txt");
File dir = new File("C:/temp");System.out.println(file.isFile());        // 输出: true
System.out.println(file.isDirectory());   // 输出: false
System.out.println(dir.isFile());         // 输出: false
System.out.println(dir.isDirectory());    // 输出: true

3.3 可读性、可写性和可执行性判断

  • canRead():判断文件或目录是否可读。
  • canWrite():判断文件或目录是否可写。
  • canExecute():判断文件或目录是否可执行。
File file = new File("C:/temp/test.txt");
System.out.println("可读: " + file.canRead());
System.out.println("可写: " + file.canWrite());
System.out.println("可执行: " + file.canExecute());

3.4 获取文件或目录的属性

  • length():获取文件的长度(字节数),对目录无效。
  • lastModified():获取文件或目录的最后修改时间(毫秒值)。
  • getName():获取文件或目录的名称。
  • getPath():获取文件或目录的路径。
  • getAbsolutePath():获取文件或目录的绝对路径。
  • getParent():获取父目录的路径。
File file = new File("C:/temp/test.txt");
System.out.println("文件长度: " + file.length() + " 字节");
System.out.println("最后修改时间: " + new java.util.Date(file.lastModified()));
System.out.println("名称: " + file.getName());
System.out.println("路径: " + file.getPath());
System.out.println("绝对路径: " + file.getAbsolutePath());
System.out.println("父目录: " + file.getParent());

四、目录内容遍历

4.1 list() 方法

list()方法返回目录下的文件和目录名称数组(字符串数组)。

File dir = new File("C:/temp");
String[] contents = dir.list();
if (contents != null) {for (String name : contents) {System.out.println(name);}
}

4.2 listFiles() 方法

listFiles()方法返回目录下的文件和目录的File对象数组,提供更丰富的操作。

File dir = new File("C:/temp");
File[] files = dir.listFiles();
if (files != null) {for (File file : files) {if (file.isFile()) {System.out.println("文件: " + file.getName());} else if (file.isDirectory()) {System.out.println("目录: " + file.getName());}}
}

4.3 使用文件过滤器

可以通过传入FilenameFilterFileFilter接口的实现类,过滤目录内容。

// 使用FilenameFilter过滤以.txt结尾的文件
File dir = new File("C:/temp");
String[] txtFiles = dir.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return name.endsWith(".txt");}
});// 使用FileFilter过滤所有目录
File[] directories = dir.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.isDirectory();}
});

五、路径操作

5.1 重命名和移动文件 - renameTo()

renameTo()方法用于重命名文件或移动文件到新位置。

File oldFile = new File("C:/temp/oldname.txt");
File newFile = new File("C:/temp/newname.txt");// 重命名文件
if (oldFile.renameTo(newFile)) {System.out.println("文件重命名成功");
} else {System.out.println("文件重命名失败");
}// 移动文件到新目录
File destDir = new File("C:/temp/newdir");
File movedFile = new File(destDir, "newname.txt");
if (newFile.renameTo(movedFile)) {System.out.println("文件移动成功");
} else {System.out.println("文件移动失败");
}

5.2 检查路径是否为绝对路径 - isAbsolute()

isAbsolute()方法用于判断路径是否为绝对路径。

File file1 = new File("C:/temp/test.txt");
File file2 = new File("test.txt");System.out.println(file1.isAbsolute());  // 输出: true
System.out.println(file2.isAbsolute());  // 输出: false

六、实战案例

6.1 递归删除目录

递归删除目录及其所有子目录和文件的实现:

public static void deleteDirectory(File directory) {if (directory.isDirectory()) {File[] files = directory.listFiles();if (files != null) {for (File file : files) {deleteDirectory(file);}}}directory.delete();
}// 使用示例
File dir = new File("C:/temp/dirToDelete");
deleteDirectory(dir);

6.2 统计目录大小

递归统计目录及其子目录下所有文件的总大小:

public static long getDirectorySize(File directory) {long size = 0;if (directory.isDirectory()) {File[] files = directory.listFiles();if (files != null) {for (File file : files) {if (file.isFile()) {size += file.length();} else {size += getDirectorySize(file);}}}}return size;
}// 使用示例
File dir = new File("C:/temp");
System.out.println("目录大小: " + getDirectorySize(dir) + " 字节");

6.3 文件搜索工具

实现一个简单的文件搜索工具,根据文件名查找文件:

public static void searchFiles(File directory, String fileName) {if (directory.isDirectory()) {File[] files = directory.listFiles();if (files != null) {for (File file : files) {if (file.isDirectory()) {searchFiles(file, fileName);} else if (file.getName().contains(fileName)) {System.out.println("找到文件: " + file.getAbsolutePath());}}}}
}// 使用示例
File dir = new File("C:/temp");
searchFiles(dir, "test");

七、注意事项与常见问题

  1. 路径分隔符问题:不同操作系统使用不同的路径分隔符(Windows使用\,Linux/Mac使用/)。为了确保代码跨平台兼容,建议使用File.separatorFile.pathSeparator常量。
// 使用File.separator创建跨平台路径
File file = new File("C:" + File.separator + "temp" + File.separator + "test.txt");
  1. 权限问题:在删除文件或目录时,可能会因为权限不足而失败。确保程序有足够的权限执行相应操作。

  2. 目录非空问题:使用delete()方法删除目录时,目录必须为空。如果目录不为空,需要先递归删除所有子目录和文件。

  3. 文件不存在问题:在调用如length()lastModified()等方法前,建议先使用exists()方法检查文件是否存在,避免不必要的异常。

总结

Java中的File类为文件和目录操作提供了丰富的方法,通过合理使用这些方法,我们可以轻松实现文件的创建、删除、查询以及目录内容遍历等功能。本文详细介绍了File类的常用方法,掌握这些方法对于开发文件管理工具、数据处理程序等应用非常重要。

在实际开发中,我们一般结合Java 7引入的java.nio.file包(Path、Paths、Files类)一起使用,以获得更强大、更灵活的文件操作能力。

若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ

相关文章:

Java-File类基本方法使用指南

Java-File类基本方法使用指南 一、File类基础概念1.1 什么是File类1.2 File类的构造函数 二、文件和目录的创建与删除2.1 创建文件 - createNewFile()2.2 创建目录 - mkdir() 和 mkdirs()2.3 删除文件或目录 - delete() 三、文件和目录的查询与判断3.1 存在性判断 - exists()3.…...

Python爬虫实战:研究PyQuery库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。如何高效地从海量的网页数据中提取有价值的信息,成为当前信息技术领域的一个重要研究方向。网络爬虫作为一种自动获取网页内容的程序,能够按照一定的规则,自动地抓取万维网信息,在搜索引擎…...

第九篇:MySQL 安全加固与访问控制策略实战

数据库的安全不仅仅是防止外部入侵,更包括合理配置账户权限、日志审计、网络加密、配置加固等。本文将系统性梳理 MySQL 的安全机制与实战加固方法,助你构建安全可靠的数据库运行环境。 一、数据库安全风险面 数据库常面临的威胁: 弱口令或默…...

神经网络-Day40

目录 单通道图片的规范写法图像任务中的张量形状NLP任务中的张量形状1. **Flatten操作**2. **view/reshape操作** 总结彩色图片的规范写法 图像数据的格式以及模型定义的过程,和之前结构化数据的略有不同,主要差异体现在2处 模型定义的时候需要展平图像由…...

WindowServer2022下docker方式安装dify步骤

WindowServer2022下docker方式安装dify步骤(稳定后考虑部署至linux中) 教程:https://blog.csdn.net/qq_49035156/article/details/143264534 0、资源要求 ---windows:8核CPU、16G内存、200G500G存储 ---10.21.31.122/administra…...

Java五种方法批量处理List元素全解

Java:如何优雅批量处理List中的每个元素 一、场景分析:为什么需要批量处理List?二、核心方法:五种实现方式对比2.1 普通for循环(最直接的方式)代码示例:优缺点: 2.2 Java 8 replaceAll&#xff…...

springboot文件上传下载

基于ResponseEntity的下载响应 SpringBoot中,ResponseEntity类型可以精确控制HTTP响应,为文件下载提供完善的HTTP头信息。 RestController RequestMapping("/api/download") public class FileDownloadController {GetMapping("/file/{…...

webpack CDN打包优化

CDN网络分发服务 请求资源时最近的服务器将缓存内容交给用户 体积较大且变动不多的文件存在CDN文件中 react react-dom资源 // 添加自定义对于webpack的配置const path require(path) const { whenProd, getPlugin, pluginByName } require(craco/craco)module.exports {//…...

ARM内核一览

经常看介绍某某牛批芯片用的又是ARM什么核,看的云里雾里,所以简单整理整理。(内容来自官网和GPT) 1 ARM 内核总体分类 系列特点应用场景Cortex-M超低功耗、低成本、实时性嵌入式系统、微控制器、IoTCortex-R高可靠性、硬实时汽车…...

Rust 和 Python 如何混合使用

Rust 与 Python 可以通过多种方式混合使用,如 FFI 接口、PyO3 库、CFFI、CPython API、wasm 模块嵌入等。这种混合开发模式可结合 Rust 的性能优势与 Python 的开发效率。其中,PyO3 是目前最受欢迎的桥接工具,它允许使用 Rust 编写 Python 扩…...

台式电脑CPU天梯图_2025年台式电脑CPU天梯图

CPU的选择绝对是重中之重,它关乎了一台电脑性能好坏。相信不少用户,在挑选CPU的时候不知道谁强谁弱,尤其是intel和AMD两款CPU之间。下面通过2025年台式电脑CPU天梯图来了解下这两款cpu. 2025年台式电脑CPU天梯图 2025年台式电脑CPU天梯图包含了老旧型号以及12代、13代、14代…...

2025年渗透测试面试题总结-匿名[校招]安全服务工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 匿名[校招]安全服务工程师 一面问题与完整回答 1. 学校、专业、成绩与排名 2. 学习安全时长 3. 当前学习…...

Deseq2:MAG相对丰度差异检验

首先使用代码将contigs和MAG联系起来 https://github.com/MrOlm/drep/blob/master/helper_scripts/parse_stb.py ~/parse_stb.py --reverse -f ~/bin_dir/* -o ~/bin_dir/genomes.stb # 查看第一列的contigs有没有重复(重复的话会影响后续比对) awk {p…...

CTFHub-RCE 命令注入-过滤目录分隔符

观察源代码 代码里面可以发现过滤了目录分隔符\和/ 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 发现存在一个flag_is_here的文件夹,我们需要打开这个文件夹找到目标文件我们尝试分步,先利…...

从零开始的数据结构教程(七) 回溯算法

🔄 标题一:回溯核心思想——走迷宫时的“穷举回头”策略 回溯算法 (Backtracking) 是一种通过探索所有可能的候选解来找出所有的解或某些解的算法。它就像你在一个复杂的迷宫中寻找出路:当你遇到一个岔路口时,你会选择一条路继续…...

CentOS-stream-9 Zabbix的安装与配置

一、Web环境搭建部署Zabbix时,选择合适的MariaDB、PHP和Nginx版本非常重要,以确保兼容性和最佳性能。以下是建议版本:Zabbix 6.4 MariaDB:官方文档推荐使用MariaDB 10.3或更高版本。对于CentOS Stream 9,建议使用Maria…...

开源是什么?我们为什么要开源?

本片为故事类文章推荐听音频哦 软件自由运动的背景 梦开始的地方 20世纪70年代,软件行业处于早期发展阶段,软件通常与硬件捆绑销售,用户对软件的使用、修改和分发权利非常有限。随着计算机技术的发展和互联网的普及,越来越多的开…...

【unity游戏开发——编辑器扩展】EditorApplication公共类处理编辑器生命周期事件、播放模式控制以及各种编辑器状态查询

注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、监听编辑器事件1、常用编辑器事件2、示例监听播放模…...

elasticsearch低频字段优化

在Elasticsearch中,通过设置"index": false关闭低频字段的倒排索引构建是常见的优化手段,以下是关键要点: 一、核心机制 ‌倒排索引禁用‌ 设置index: false后,字段不会生成倒排索引,无法通过常规查…...

React---day3

React 2.5 jsx的本质 jsx 仅仅只是 React.createElement(component, props, …children) 函数的语法糖。所有的jsx最终都会被转换成React.createElement的函数调用。 createElement需要传递三个参数: 参数一:type 当前ReactElement的类型;…...

PyCharm接入DeepSeek,实现高效AI编程

介绍本土AI工具DeepSeek如何结合PyCharm同样实现该功能。 一 DeepSeek API申请 首先进入DeepSeek官网:DeepSeek 官网 接着点击右上角的 “API 开放平台“ 然后点击API keys 创建好的API key,记得复制保存好 二 pycharm 接入deepseek 首先打开PyCh…...

前端面经 get和post区别

get获取数据 post提交资源,引起服务器状态变化或者副作用 区别 1get会比post更不安全 get参数写在url中 post在请求体内 2get报文 head和body一起发 响应200 post报文 先发head 100 再发 body 200 3 get请求url有长度限制 4 默认缓存get 请求...

CTFSHOW-WEB-36D杯

给你shell 这道题对我这个新手还是有难度的&#xff0c;花了不少时间。首先f12看源码&#xff0c;看到?view_source&#xff0c;点进去看源码 <?php //Its no need to use scanner. Of course if you want, but u will find nothing. error_reporting(0); include "…...

MySQL connection close 后, mysql server上的行为是什么

本文着重讲述的是通过 msql client 连接到 mysql server &#xff0c;发起 update 、 select 操作(由于数据量非常大&#xff0c;所以 update、select 操作都很耗时&#xff0c;即在结果返回前我们有足够的时间执行一些操作) 。 在客户端分别尝试执行 ctrl C 结束关闭 mysql c…...

RabbitMQ vs MQTT:深入比较与最新发展

RabbitMQ vs MQTT&#xff1a;深入比较与最新发展 引言 在消息队列和物联网&#xff08;IoT&#xff09;通信领域&#xff0c;RabbitMQ 和 MQTT 是两种备受瞩目的技术&#xff0c;各自针对不同的需求和场景提供了强大的解决方案。随着 2025 年的到来&#xff0c;这两项技术都…...

金砖国家人工智能高级别论坛在巴西召开,华院计算应邀出席并发表主题演讲

当地时间5月20日&#xff0c;由中华人民共和国工业和信息化部&#xff0c;巴西发展、工业、贸易与服务部&#xff0c;巴西公共服务管理和创新部以及巴西科技创新部联合举办的金砖国家人工智能高级别论坛&#xff0c;在巴西首都巴西利亚举行。 中华人民共和国工业和信息化部副部…...

【KWDB 创作者计划】_再热垃圾发电汽轮机仿真与监控系统:KaiwuDB 批量插入10万条数据性能优化实践

再热垃圾发电汽轮机仿真与监控系统&#xff1a;KaiwuDB 批量插入10万条数据性能优化实践 我是一台N25-3.82/390型汽轮机&#xff0c;心脏在5500转/分的轰鸣中跳动。垃圾焚烧炉是我的胃&#xff0c;将人类遗弃的残渣转化为金色蒸汽&#xff0c;沿管道涌入我的胸腔。 清晨&#x…...

CentOS 7 安装docker缺少slirp4netnsy依赖解决方案

CentOS 7安装docker缺少slirp4netnsy依赖解决方案 Error: Package: docker-ce-rootless-extras-26.1.4-1.el7.x86_64 (docker-ce-stable) Requires: slirp4netns > 0.4 Error: Package: docker-ce-rootless-extras-26.1.4-1.el7.x86_64 (docker-ce-stable) 解决方案 若wge…...

Android第十一次面试多线程篇

​面试官​&#xff1a; “你在项目里用过Handler吗&#xff1f;能说说它是怎么工作的吗&#xff1f;” ​候选人​&#xff1a; “当然用过&#xff01;比如之前做下载功能时&#xff0c;需要在后台线程下载文件&#xff0c;然后在主线程更新进度条。这时候就得用Handler来切…...

安全,稳定可靠的政企即时通讯数字化平台

在当今数字化时代&#xff0c;政企机构面临着复杂多变的业务需求和日益增长的沟通协作挑战。BeeWorks作为一款安全&#xff0c;稳定可靠的政企即时通讯数字化平台&#xff0c;凭借其安全可靠、功能强大的特性&#xff0c;为政企提供了高效、便捷的沟通协作解决方案&#xff0c;…...