文件操作和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. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
