文件操作和IO(2):Java中操作文件
目录
一、File的属性
二、File的构造方法
三、File的方法
四、代码示例
1、getName,getParent,getPath方法
2、getAbsolutePath,getCanonicalPath方法
3、exists,isDirectory,createNewFile方法
4、createNewFile,delete,deleteOnExit
5、list,listFiles,mkdir,mkdirs,renameTo方法
本章内容,主要涉及文件的元信息、路径的操作,并不存在对文件的读写操作。
Java通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意:有File对象并不意味着真实存在该文件。
以下是对File的概述:
一、File的属性
| 修饰符及类型 | 属性 | 说明 |
| static String | pathSeparator | 依赖于系统的路径分隔符,String 类型的表示 |
| static char | pathSeparatorChar | 依赖于系统的路径分隔符,char类 型 |
这里路径直接的分隔符是根据系统自动调整的,在开发过程中还是更推荐使用正斜杠 “ / ”。windows也支持正斜杠。
二、File的构造方法
| 签名 | 说明 |
| File(File parent, String child) | 根据父目录 + 孩子文件路径,创建⼀个新的 File 实例 |
| File(String pathname) | 根据文件路径创建⼀个新的 File 实例,路径可以是绝 对路径或者相对路径 |
| File(String parent, String child) | 根据父目录 + 孩子文件路径,创建⼀个新的 File 实 例,父目录用路径表示 |
这里主要介绍中间的构造方法,中间的是最常用的。注意:这里的决定路径有两种情况:
1、如果是在idea中运行程序,此时工作目录就是在项目所在的目录。
2、如果把代码打包成一个jar包,此时工作目录就是在jar包所在目录。
三、File的方法
| 修饰符及返回值类型 | 方法签名 | 说明 |
| String | getParent() | 返回 File 对象的⽗⽬录⽂件路径 |
| String | getName() | 返回 FIle 对象的纯⽂件名称 |
| String | getPath() | 返回 File 对象的⽂件路径 |
| String | getAbsolutePath() | 返回File 对象的绝对路径 |
| String | getCanonicalPath() | 返回 File 对象的修饰过的绝对路径 |
| boolean | exists() | 判断 File 对象描述的⽂件是否真实 存在 |
| boolean | isDirectory() | 判断 File 对象代表的⽂件是否是⼀个⽬录 |
| boolean | isFile() | 判断 File 对象代表的⽂件是否是⼀ 个普通⽂件 |
| boolean | createNewFile() | 根据 File对象,⾃动创建⼀个空⽂ 件。成功创建后返回 true |
| boolean | delete() | 根据 File 对象,删除该⽂件。成功 删除后返回 true |
| void | deleteOnExit() | 根据 File 对象,标注⽂件将被删 除,删除动作会到 JVM 运⾏结束时 才会进⾏ |
| String[] | list() | 返回 File 对象代表的⽬录下的所有 ⽂件名 |
| File[] | listFiles() | 返回 File 对象代表的⽬录下的所有 ⽂件,以 File 对象表⽰ |
| boolean | mkdir() | 创建 File 对象代表的⽬录 |
| boolean | mkdirs() | 创建 File 对象代表的⽬录,如果必 要,会创建中间⽬录 |
| boolean | renameTo(File dest) | 进⾏⽂件改名,也可以视为我们平 时的剪切、粘贴操作 |
| boolean | canRead() | 判断⽤⼾是否对⽂件有可读权 |
| boolean | canWrite() | 判断⽤⼾是否对⽂件有可写权限 |
四、代码示例
1、getName,getParent,getPath方法
绝对路径的File对象,代码如下
public class IODemo1 {public static void main(String[] args) {//指定文件的路径File f1 = new File("C:/IOTest/test.txt");//绝对路径System.out.println(f1.getPath());//返回File对象的⽂件路径System.out.println(f1.getParent());//返回 File 对象的⽗⽬录⽂件路径System.out.println(f1.getName());//返回 FIle 对象的纯⽂件名称}
}
执行结果:

相对路径的File对象,代码如下
public class IODemo1 {public static void main(String[] args) {//指定文件的路径File f1 = new File("./test.txt");//绝对路径System.out.println(f1.getPath());//返回File对象的⽂件路径System.out.println(f1.getParent());//返回 File 对象的⽗⽬录⽂件路径System.out.println(f1.getName());//返回 FIle 对象的纯⽂件名称}
}
执行结果:

2、getAbsolutePath,getCanonicalPath方法
使用绝对路径创造一个File对象,代码如下
public class IODemo2 {public static void main(String[] args) throws IOException {File f = new File("C:/IOTest/test.txt");//绝对路径System.out.println(f.getAbsolutePath());//返回File对象的绝对路径System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径}
}
执行结果:

使用相对路径创建File对象,代码如下:
public class IODemo2 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");//绝对路径System.out.println(f.getAbsolutePath());//返回File对象的绝对路径System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径}
}
执行结果:

可以看出,上面方法在绝对路径中没有啥差别,但在相对路径的就有些许差别。getCanonicalPath返回File对象的修饰过的绝对路径,也就没有了点 ' . ' 修饰。
3、exists,isDirectory,createNewFile方法
使用相对路径创建File对象,代码如下:
public class IODemo3 {public static void main(String[] args) {File f = new File("./test.txt");boolean ret1 = f.exists();//判断 File 对象描述的⽂件是否真实存在boolean ret2 = f.isDirectory();//判断 File 对象代表的⽂件是否是⼀个⽬录boolean ret3 = f.isFile();//判断 File 对象代表的⽂件是否是⼀个普通⽂件System.out.println(ret1);System.out.println(ret2);System.out.println(ret3);}
}
执行结果:

4、createNewFile,delete,deleteOnExit
先创造出一个文件,使用createNewFile方法,代码如下:
public class IODemo4 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 trueSystem.out.println(ret1);}
}
执行代码前:

执行代码后:

多了test.txt文件
delete方法删除test.txt文件,代码如下:
public class IODemo4 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 trueSystem.out.println(ret1);boolean ret = f.delete();//根据 File 对象,删除该⽂件。成功删除后返回 true System.out.println(ret);}
}
执行结果:

test.txt文件没有了。
deleteOnExit方法,在程序执行完后才会删除指定的文件,代码如下:
public class IODemo4 {public static void main(String[] args) throws IOException, InterruptedException {File f = new File("./test.txt");boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 trueSystem.out.println(ret1);//根据 File 对象,标注⽂件将被删除,删除动作会到 JVM 运⾏结束时才会进⾏f.deleteOnExit();Thread.sleep(5000);}
}
执行前:

有test.txt文件。
执行后:

过5秒后才会删除test.txt文件。
5、list,listFiles,mkdir,mkdirs,renameTo方法
list:
代码如下:
public class IODemo5 {public static void main(String[] args) {File f = new File(".");String[] files = f.list();//返回 File 对象代表的⽬录下的所有⽂件名System.out.println(Arrays.toString(files));}
}
执行结果:

listFiles:
代码如下:
public class IODemo5 {public static void main(String[] args) {
// String[] files = f.list();//返回 File 对象代表的⽬录下的所有⽂件名
// System.out.println(Arrays.toString(files));File f = new File(".");File[] files = f.listFiles();//返回File对象代表的⽬录下的所有⽂件,以File对象表⽰System.out.println(Arrays.toString(files));}
}
执行结果:

mkdir:
代码如下:
public class IODemo6 {public static void main(String[] args) {File f = new File("./aaa");//创建 File 对象代表的⽬录boolean ret1 = f.mkdir();System.out.println(ret1);}
}
执行前:

执行后:
多出了aaa目录。
mkdirs:
代码如下:
public class IODemo7 {public static void main(String[] args) {File f = new File("./aaa/bbb/ccc");//创建 File 对象代表的⽬录,如果必 要,会创建中间⽬录boolean ret = f.mkdirs();System.out.println(ret);}
}
执行前:

执行后:

当前目录下多了aaa/bbb/ccc。
renameTo:
代码如下:
public class IODemo8 {public static void main(String[] args) {File src = new File("./test2.txt");File dest = new File("./test.txt");src.renameTo(dest);//进⾏⽂件改名,也可以视为我们平时的剪切、粘贴操作}
}
执行前:
文件名是test.txt。
执行后:
文件名是test2.txt。
除重命名功能外,renameTo还有移动功能(移动比复制、粘贴效率高,前提是在同一硬盘上)。
都看到这了,点个赞再走吧,谢谢谢谢谢
相关文章:
文件操作和IO(2):Java中操作文件
目录 一、File的属性 二、File的构造方法 三、File的方法 四、代码示例 1、getName,getParent,getPath方法 2、getAbsolutePath,getCanonicalPath方法 3、exists,isDirectory,createNewFile方法 4、createNewF…...
人工智能-零基础
机缘 扩充下知识栈,准备零基础开始 人工智能零基础 日常 日常水一下博客… 憧憬 努力成为一个会人工智能的程序员...
网络爬虫部分应掌握的重要知识点
目录 一、预备知识1、Web基本工作原理2、网络爬虫的Robots协议 二、爬取网页1、请求服务器并获取网页2、查看服务器端响应的状态码3、输出网页内容 三、使用BeautifulSoup定位网页元素1、首先需要导入BeautifulSoup库2、使用find/find_all函数查找所需的标签元素 四、获取元素的…...
git命令笔记
文章目录 0、参考文档1、常用指令git checkout系列git pull系列git push系列git reset系列git branch系列git log系列git revert 撤销某次提交git diff其他 2、查看和修改用户名和邮箱,生成密钥other 0、参考文档 Git使用教程:最详细、最傻瓜、最浅显、…...
微服务day03-Nacos配置管理与Nacos集群搭建
一.Nacos配置管理 Nacos不仅可以作为注册中心,可以进行配置管理 1.1 统一配置管理 统一配置管理可以实现配置的热更新(即不用重启当服务发生变更时也可以直接更新) dataId格式:服务名-环境名.yaml,分组一般使用默认…...
DFS剪枝
剪枝 将搜索过程中一些不必要的部分剔除掉,因为搜索过程构成了一棵树,剔除不必要的部分,就像是在树上将树枝剪掉,故名剪枝。 剪枝是回溯法中的一种重要优化手段,方法往往先写一个暴力搜索,然后找到某些特…...
基于SpringBoot多模块项目引入其他模块时@Autowired无法注入
基于SpringBoot多模块项目引入其他模块时Autowired无法注入 一、问题描述1、解决方案 一、问题描述 启动Spring Boot项目时报 Could not autowire. No beans of ‘xxxxxxxx’ type found. 没有找到bean的实例,即spring没有实例化对象,也就无法根据配置文…...
每日一题——LeetCode1566.重复至少K次且长度为M的模式
方法一 暴力枚举 var containsPattern function(arr, m, k) {const n arr.length;for (let l 0; l < n - m * k; l) {let offset;for (offset 0; offset < m * k; offset) {if (arr[l offset] ! arr[l offset % m]) {break;}}if (offset m * k) {return true;}}r…...
代码随想录刷题笔记-Day27
1. 全排列 46. 全排列https://leetcode.cn/problems/permutations/ 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],…...
【小沐学GIS】QGIS安装和入门使用
文章目录 1、简介2、下载和安装3、使用3.1 XYZ Tiles3.2 WMS / WMTS3.3 GeoJson文件加载 4、在线资源结语 1、简介 QGIS是一款开源地理信息系统。该项目于2002年5月诞生,同年6月作为SourceForge上的一个项目建立。QGIS目前运行在大多数Unix平台、Windows和macOS上。…...
黑马程序员——接口测试——day03——Postman断言、关联、参数化
目录: Potman断言 Postman断言简介Postman常用断言 断言响应状态码断言包含某字符串断言JSON数据Postman断言工作原理Postman关联 简介实现步骤核心代码创建环境案例1案例2Postman参数化 简介数据文件简介编写数据文件 CSV文件JSON文件导入数据文件到postman读取数…...
Unreal触屏和鼠标控制旋转冲突问题
Unreal触屏和鼠标控制旋转冲突问题 鼠标控制摄像机旋转添加Input轴计算旋转角度通过轴事件控制旋转 问题和原因问题原因 解决办法增加触摸控制旋转代码触屏操作下屏蔽鼠标轴响应事件 鼠标控制摄像机旋转 通过Mouse X和Mouse Y控制摄像机旋转。 添加Input轴 计算旋转角度 通过…...
Vins-Moon配准运行
Vins-Moon运行 求助!!!源码地址电脑配置环境配置编译Kitti数据集制作IMU时间戳问题 适配Kitti数据集运行结果Euroc数据集kitti数据集 evo评估(KITTI数据)输出轨迹(tum格式)结果 求助!!ÿ…...
MSCKF3讲:后端理论推导(上)
MSCKF3讲:后端理论推导(上) 文章目录 MSCKF3讲:后端理论推导(上)1 MSCKF中的状态变量① IMU状态:② cam0状态:③ IMU和cam0间状态关系 2 微分方程递推(数值解)3 IMU状态预…...
群控代理IP搭建教程:打造一流的网络爬虫
目录 前言 一、什么是群控代理IP? 二、搭建群控代理IP的步骤 1. 获取代理IP资源 2. 配置代理IP池 3. 选择代理IP策略 4. 编写代理IP设置代码 5. 异常处理 三、总结 前言 群控代理IP是一种常用于网络爬虫的技术,通过使用多个代理IP实现并发请求…...
【IO流系列】字符流练习(拷贝、文件加密、修改文件数据)
字符流练习 练习1:文件夹拷贝1.1 需求1.2 代码实现1.3 输出结果 练习2:文件加密与解密2.1 需求2.2 代码实现2.3 输出结果 练习3:修改文件数据(常规方法)3.1 需求3.2 代码实现3.3 输出结果 练习4:修改文件数…...
华为云磁盘挂载
华为云磁盘挂载 磁盘挂载情况 fdisk -l 2. 查看当前分区情况 df -h 3.给新硬盘添加新分区 fdisk /dev/vdb 4.分区完成,查询所有设备的文件系统类型 blkid 发现新分区并没有文件系统类型(type为文件系统具体类型,有ext3,ext4,xfs,iso9660等…...
通过大语言模型理解运维故障:评估和总结
张圣林 南开大学软件学院副教授、博士生导师 第六届CCF国际AIOps挑战赛程序委员会主席 在ATC、WWW、VLDB、KDD、SIGMETRICS等国际会议和JSAC、TC、TSC等国际期刊发表高水平论文50余篇。主持国家自然科学基金项目2项,横向项目13项(与华为、字节跳动、腾讯…...
SVN教程-SVN的基本使用
SVN(Apache Subversion)是一款强大的集中式版本控制系统,它在软件开发项目中扮演着至关重要的角色,用于有效地跟踪、记录和管理代码的演变过程。与分布式系统相比,SVN 的集中式架构使得团队能够更加协同地进行开发&…...
【MySQL】数据查询——DQL基本数据库查询
目录 查询语法1. 查询表中所有的数据行和列,采用“*”符号2. 查询表中指定列的数据。3. 在查询中使用别名,使用“AS”关键字。4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
