【文件IO】文件系统操作
文章目录
- 基本操作概述
- 1. 文件属性
- 2. 文件构造方法
- 3. 文件方法
- 1. 文件创建
- 2. 文件删除
- 3. 查看目录下所有的文件名
- 4. 遍历目录
- 5. 创建目录
- 5. 目录重命名
基本操作概述
- 创建文件
- 删除文件
- 创建目录
- 重命名文件
- 判定文件存在…
Java 中,提供了一个 File 类,进行文件系统操作,这个对象会使用“路径”进行初始化,从而表示一个具体的文件(这个文件可以存在,也可以不存在)
再基于这个对象进行后续操作
1. 文件属性
属性: 文件路径的分隔符
| 修饰符及类型 | 属性 | 说明 | |
|---|---|---|---|
| static String | pathSeparator | 依赖于系统的路径分隔符,String 类型的表⽰ | |
| static char | pathSeparator | 依赖于系统的路径分隔符,char 类型的表⽰ |
2. 文件构造方法
构造方法:
| 签名 | 说明 | |
|---|---|---|
| File (File parent, String child) | 根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例 | |
File (String pathname) | 根据⽂件路径创建⼀个新的 File 实例,路径可以是绝对路径或者相对路径 | |
| File (String parent, String child) | 根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例,⽗⽬录⽤路径表⽰ | |
| 此处写相对路径的时候,就需要明确基准目录是啥,代码中写的相对路径的基准目录取决于运行程序的方式 |
- 直接在 IDEA 中运行,此时的基准路径就是该项目所在的目录
- 再命令行中,通过 Java 命令来运行,此时基准路径就是 Java 命令所处的目录
- 某个程序可能是被其他进程调用的。进程 1 通过创建字进程的方式运行进程 2,进程 2 的基准路径就和进程 1 相同
- 代码执行过程中,还可以通过一些 API 修改基准路径,改成我们指定的某个路径
3. 文件方法
方法:
| 修饰符及返回值类型 | 方法签名 | 说明 | 解释 | |
|---|---|---|---|---|
| String | getParent() | 返回 File 对象的⽗⽬录⽂件路径 | 获取文件所在的目录 C:\user\1 | |
| String | getName() | 返回 FIle 对象的纯⽂件名称 | 获取文件名test.txt | |
| String | getPath() | 返回 File 对象的⽂件路径 | 获取当前文件所在的目录+当前文件名C:\user\1\text.txt | |
| 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() | 判断⽤⼾是否对⽂件有可写权限 | 判断写权限 |
- 一定要使用双反斜杠表示
\,
File file = new File("D:\\My Computer\\02 Stricky\\02 Code\\03 IDEA");
import java.io.File;
import java.io.IOException; public class Demo1 { public static void main(String[] args) throws IOException { File file = new File("D:\\My Computer\\02 Stricky\\02 Code\\03 IDEA\\text.txt"); System.out.println(file.getParent()); //文件目录System.out.println(file.getName()); //文件名本体System.out.println(file.getPath()); //文件路径System.out.println(file.getAbsolutePath()); //绝对路径System.out.println(file.getCanonicalFile()); //修饰过的绝对路径}
}//运行结果
D:\My Computer\02 Stricky\02 Code\03 IDEA
text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\text.txt
我们可以发现,最后三个路径没区别
- 因为我们针对
file对象构造的时候,是拿绝对路径进行构造的,所以此时的Path就是一个绝对路径,于是三个getPath就都是一样的
相对路径的基准不是固定的,此时我们通过 IDEA 运行程序,基准路径就是 IDEA 打开的这个项目所在的路径
import java.io.File;
import java.io.IOException; public class Demo1 { public static void main(String[] args) throws IOException { File file1 = new File(".\\text.txt"); System.out.println(file1.getParent()); System.out.println(file1.getName()); System.out.println(file1.getPath()); System.out.println(file1.getAbsolutePath()); System.out.println(file1.getCanonicalFile()); System.out.println("======================"); File file2 = new File("..\\text.txt"); System.out.println(file1.getParent()); System.out.println(file1.getName()); System.out.println(file1.getPath()); System.out.println(file1.getAbsolutePath()); System.out.println(file1.getCanonicalFile()); }
}//运行结果
.
text.txt
.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\text.txt
======================
.
text.txt
.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\.\text.txt
D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code\240812-IO\text.txt
- 修饰过的绝对路径就是把多余的部分去掉了
.就是当前目录,..是代表忽略掉上一级目录
1. 文件创建
import java.io.File;
import java.io.IOException; public class Demo2 { public static void main(String[] args) throws IOException { File file = new File("./text1.txt"); boolean ok = file.createNewFile(); //创建新文件 System.out.println(ok); //看文件创建是否成功System.out.println(file.exists()); //看文件是否存在 System.out.println(file.isFile()); //看文件是否是个普通文件 System.out.println(file.isDirectory()); //看文件是否是一个目录 }
}//运行结果
true
true
true
false

IOException
创建文件,很可能会抛出异常
- 硬盘空间不够了
- 在工作中,非常普遍,尤其是服务器,存储很多数据,会记录很多日志,每天都会生成很多新的内容
- 一般都需要定时清理硬盘,搭建报警
- 没有权限
- 确保你有操作的权限,才能进行
- 对于文件的操作,典型的就是两个(读/写)
2. 文件删除
import java.io.File; public class Demo3 { public static void main(String[] args) { File file = new File("./text1.txt"); boolean ok = file.delete(); System.out.println(ok); }
}
//运行结果
true
- 文件消失了
- 还有一种是等待进程结束之后再进行删除的操作:
deletOnExit(),存在的意义就是可以去构造一些“临时文件”
- 比如使用 word 创建一个文档,打开“显示隐藏文件”,在你
word文档的同级目录下,就有一个隐藏文件,名字带有一些奇怪符号,一旦你把现在编辑的文档关闭了,这个隐藏文件就消失了- 这个隐藏文件中保存了你当前正在修改的,还未真正保存的内容
- 若程序异常关闭,临时文件就不会消失,就可以通过这个文件,还原出你正在编辑的内容
3. 查看目录下所有的文件名
import java.io.File;
import java.util.Arrays; public class Demo4 { public static void main(String[] args) { File file = new File("."); System.out.println(Arrays.toString(file.list())); }
}
//运行结果
[.gitignore, .idea, 240812-IO.iml, out, src]
- 如果直接使用
list/listFiles,只能看到当前目录中的内容 - 如果想看到某个目录下所有的目录和文件,就需要递归来完成
4. 遍历目录
- 若要完成递归操作就需要一个函数来辅助完成
- 首先判断是不是目录
- 用数组,列出当前目录中所包含的内容
import java.io.File; public class Demo5 { private static void scan(File currentDir) { //1.先判定是否是目录 if(!currentDir.isDirectory()){ return; } //2.列出当前目录中包含的内容 File[] files = currentDir.listFiles(); if(files == null || files.length == 0){ //不存在的路径 || 空目录 return; } //3.打印当前目录 System.out.println(currentDir.getAbsolutePath()); //4.遍历这里所有的内容,一次进行判断 for(File file : files) { if(file.isFile()) { //如果是普通文件,直接打印文件路径 System.out.println(file.getAbsolutePath()); }else { //如果是空目录,就继续进行递归 scan(file); } } } public static void main(String[] args) { File file = new File("./"); scan(file); }
}
5. 创建目录
mkdir()
import java.io.File; public class Demo6 { public static void main(String[] args) { File f = new File("./abc"); boolean ok = f.mkdir(); System.out.println(ok); }
}
//运行结果
true

mkdirs(),可以处理多级目录
import java.io.File; public class Demo6 { public static void main(String[] args) { File f = new File("./abc/def/hhh"); boolean ok = f.mkdirs(); System.out.println(ok); }
}

5. 目录重命名
import java.io.File; public class Demo7 { public static void main(String[] args) { File srcFile = new File("./abc"); File desrFile = new File("./abc123"); boolean ok = srcFile.renameTo(desrFile); System.out.println(ok); }
}

- 通过重命名操作,实现移动文件的效果
import java.io.File; public class Demo7 { public static void main(String[] args) { File srcFile = new File("./abc123/def"); File desrFile = new File("./def"); boolean ok = srcFile.renameTo(desrFile); System.out.println(ok); }}
- 移动 文件,就是修改文件所在的路径,文件路径的修改,也可以视为一种
相关文章:
【文件IO】文件系统操作
文章目录 基本操作概述1. 文件属性2. 文件构造方法3. 文件方法1. 文件创建2. 文件删除3. 查看目录下所有的文件名4. 遍历目录5. 创建目录5. 目录重命名 基本操作概述 创建文件删除文件创建目录重命名文件判定文件存在… Java 中,提供了一个 File 类,进…...
Spring Cloud Alibaba 集成分布式定时任务调度功能
作者:千习 背景简介 定时任务是指在约定的时间,或者按照固定频率周期性执行的任务。在企业应用中,非用户行为发起的后台业务,一般都是通过定时任务来实现,常见场景如下: 异步数据处理:比如先…...
中职云计算实训室
一、实训室建设背景 随着信息技术的飞速发展,云计算已成为推动数字化转型、促进经济社会发展的重要力量。《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》明确提出,要加快数字化发展,建设数字中国。云计算作为数…...
【python制作一个小程序作为七夕礼物】
制作一个七夕节礼物的小程序,我们可以考虑一个简单的互动程序,比如一个“七夕情侣姓名配对指数计算器”。这个程序将接收两个名字作为输入,然后输出一个随机的“配对指数”和一些浪漫的话语。以下是一个使用Python实现的简单示例:…...
一篇文章教会你如何使用Haproxy,内含大量实战案例
1. Haproxy 介绍 HAProxy是法国开发者 威利塔罗(Willy Tarreau) 使用C语言编写的自由及开放源代码软件,是一款具备高并发(万级以上)、高性能的TCP和HTTP应用程序代理. HAProxy运行在当前的硬件上,可以支持…...
PythonStudio 控件使用常用方式(二十二)TFlowPanel
PythonStudio是一个极强的开发Python的IDE工具,官网地址是:https://glsite.com/ ,在官网可以下载最新版的PythonStudio,同时,在使用PythonStudio时,它也能及时为用户升到最新版本。它使用的是Delphi的控件&…...
培训第二十七天(lvs_nat模式与lvs_dr模式配置)
上午 核心:内核中的ipvs,ipvsadm1、安装ipvsadm[rootnat ~]# yum -y install ipvsadm2、配置规则查看所有的规则,如果已经配置好规则,重启之后也就没有了[rootnat ~]# ipvsadm -L -n 1、配置vip网卡 (1)在…...
JAVA中DateFormat详解
在Java中,DateFormat 是一个抽象类,它用于格式化和解析日期。DateFormat 允许进行日期-文本之间的转换,以及日期-时间之间的解析和格式化。Java 提供了多个 DateFormat 的具体子类,其中最常用的是 SimpleDateFormat,它…...
uniapp——列表选择样式
案例 代码 <view class"list"><block v-for"(item,index) in 8" :key"index"><view class"item" click"choosePackage(item)" :class"{active:item current}"><view class"i_money&q…...
解决客户访问超时1s问题
访问公网地址返回状态码499-CSDN博客 需求描述 客户访问公司公网服务,期望在1s内完成。他们在客户端设置了超时1s的配置,如果超过1s公司服务就会报错499,这是正常的请求返回。 这里是业务简易的连路图: 分析问题 目前这个服务通过公网的alb负载均衡到ecs,通过ecs再转发…...
Linux命令(基础面试可用,都是自己觉得平时使用多的)
1.cat 参数:-n:显示行号-s:压缩连续的空行,只显示一个空行2.chattr 改变文件属性 语法:chattr [-RV] [/-/<属性>][文件或目录] 属性:a:让文件或目录仅供附加用途i:不得任意更…...
opencv-python图像增强一:传统图像去噪方法整理
一、简介: 在数字图像处理领域,噪声一直是影响图像质量的重要因素。无论是拍摄过程中的环境干扰,还是传输过程中的信号失真,噪声都可能导致图像模糊、细节丢失,甚至影响后续的图像分析和应用。为了提高图像的视觉效果…...
Canal单机部署
目录 一、前期准备 1、配置binlog日志 2、配置MQ服务 二、搭建canal 1、下载安装包 2、部署canal-admin的UI管理界面 2-1、创建&解压admin 2-2、配置UI管理界面 2-3、初始化元数据库 2-4、启动Canal Admin 3、部署canal-server服务 3-1、创建&解压deployer…...
java,每日练习02
题目 选自牛客网 1.下列关于Java中类的构造方法的描述,正确的是() A.构造方法的返回类型为void B.可以定义一个类而在代码中不写构造方法。 C.在同一个类中定义的重载构造方法不可以相互调用。 D.子类不允许调用父类的构造方法。 正确答案…...
C# TreeView
添加 TreeView 控件:定义节点:添加节点:设置节点属性:处理节点事件:自定义节点绘制:数据绑定:节点选择:节点展开和折叠:搜索和过滤:示例代码总结 C# 中的 Tre…...
通过xshell使用密钥连接阿里云服务器
目录 步骤1:创建密钥对 步骤2:连接服务器 步骤3:连接服务器 连接阿里云服务器有几种方式,例如有密码进行连接,但是密码连接安全风险较大,所以我们选择密钥方式进行连接。操作简单且安全性高 步骤1&…...
<数据集>路面坑洼识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:681张 标注数量(xml文件个数):681 标注数量(txt文件个数):681 标注类别数:1 标注类别名称:[pothole] 使用标注工具:labelImg 标注规则:对类…...
几个常用脚本
系统初始化 #!/bin/bash # 定义颜色常量 RED\033[0;31m GREEN\033[0;32m NC\033[0m # No Color #功能菜单 menu() {clearecho "请选择要执行的操作:"echo "1. 检查网络"echo "2. 关闭防火墙和SELinux"echo "3. 替换YUM源"echo "…...
gtest中TEST和TEST_F和TEST_P的区别是什么
gtest(Google Test)是Google开发的一个开源的C测试框架,它提供了多种宏来支持不同类型的测试。其中,TEST、TEST_F和TEST_P是三个常用的宏,它们各自有不同的用途和特性。以下是它们之间的主要区别: TEST 用…...
VS2022如何调出输出窗口,并在输出窗口打印日志
在输出窗口打印 System.Diagnostics.Debug.WriteLine("这是一行自定义的输出。Debug.WriteLine");System.Diagnostics.Debug.Write("这是第二行自定义的输出,Debug.Write");System.Diagnostics.Debug.WriteLine("换行");System.Diagn…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

