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

【文件IO】文件系统操作

文章目录

  • 基本操作概述
  • 1. 文件属性
  • 2. 文件构造方法
  • 3. 文件方法
    • 1. 文件创建
    • 2. 文件删除
    • 3. 查看目录下所有的文件名
    • 4. 遍历目录
    • 5. 创建目录
    • 5. 目录重命名

基本操作概述

  • 创建文件
  • 删除文件
  • 创建目录
  • 重命名文件
  • 判定文件存在…

Java 中,提供了一个 File 类,进行文件系统操作,这个对象会使用“路径”进行初始化,从而表示一个具体的文件(这个文件可以存在,也可以不存在)
再基于这个对象进行后续操作


1. 文件属性

属性: 文件路径的分隔符

修饰符及类型属性说明
static StringpathSeparator依赖于系统的路径分隔符,String 类型的表⽰
static charpathSeparator依赖于系统的路径分隔符,char 类型的表⽰

2. 文件构造方法

构造方法:

签名说明
File (File parent, String child)根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例
File (String pathname)根据⽂件路径创建⼀个新的 File 实例,路径可以是绝对路径或者相对路径
File (String parent, String child)根据⽗⽬录 + 孩⼦⽂件路径,创建⼀个新的 File 实例,⽗⽬录⽤路径表⽰
此处写相对路径的时候,就需要明确基准目录是啥,代码中写的相对路径的基准目录取决于运行程序的方式
  1. 直接在 IDEA 中运行,此时的基准路径就是该项目所在的目录
  2. 再命令行中,通过 Java 命令来运行,此时基准路径就是 Java 命令所处的目录
  3. 某个程序可能是被其他进程调用的。进程 1 通过创建字进程的方式运行进程 2,进程 2 的基准路径就和进程 1 相同
  4. 代码执行过程中,还可以通过一些 API 修改基准路径,改成我们指定的某个路径

3. 文件方法

方法:

修饰符及返回值类型方法签名说明解释
StringgetParent()返回 File 对象的⽗⽬录⽂件路径获取文件所在的目录
C:\user\1
StringgetName()返回 FIle 对象的纯⽂件名称获取文件名
test.txt
StringgetPath()返回 File 对象的⽂件路径获取当前文件所在的目录+当前文件名
C:\user\1\text.txt
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的⽂件是否真实存在看文件存不存在
booleanisDirectory()判断 File 对象代表的⽂件是否是⼀个⽬录判断文件类型
booleanisFile()判断 File 对象代表的⽂件是否是⼀个普通⽂件判断文件类型
booleancreateNewFile()根据 File 对象,⾃动创建⼀个空⽂件。成功创建后返回 true创建新文件
booleandelete()根据 File 对象,删除该⽂件。成功删除后返回 true立即删除文件
voiddeleteOnExit()根据 File 对象,标注⽂件将被删除,删除动作会到 JVM 运⾏结束时才会进⾏等到程序结束后,删除文件
String[]list()返回 File 对象代表的⽬录下的所有⽂件名得到目录下所有文件名
File[]listFiles()返回 File 对象代表的⽬录下的所有⽂件,以 File 对象表⽰得到目录下所有文件对象
booleanmkdir()创建 File 对象代表的⽬录创建一级目录
booleanmkdirs()创建 File 对象代表的⽬录,如果必要,会创建中间⽬录创建多级目录
booleanrenameTo(File dest)进⾏⽂件改名,也可以视为我们平时的剪切、粘贴操作重命名
booleancanRead()判断⽤⼾是否对⽂件有可读权限判断读权限
booleancanWrite()判断⽤⼾是否对⽂件有可写权限判断写权限

  • 一定要使用双反斜杠表示 \
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

image.png|238

IOException
创建文件,很可能会抛出异常

  1. 硬盘空间不够了
  • 在工作中,非常普遍,尤其是服务器,存储很多数据,会记录很多日志,每天都会生成很多新的内容
  • 一般都需要定时清理硬盘,搭建报警
  1. 没有权限
  • 确保你有操作的权限,才能进行
  • 对于文件的操作,典型的就是两个(读/写)

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

image.png|151

  • 文件消失了
  • 还有一种是等待进程结束之后再进行删除的操作: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. 遍历目录

  • 若要完成递归操作就需要一个函数来辅助完成
    1. 首先判断是不是目录
    2. 用数组,列出当前目录中所包含的内容
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

image.png|287


  • 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);  }
}

image.png|211

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);  }
}

image.png|529

  • 通过重命名操作,实现移动文件的效果
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);  }}
  • 移动 文件,就是修改文件所在的路径,文件路径的修改,也可以视为一种
    image.png|363

相关文章:

【文件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 参数&#xff1a;-n&#xff1a;显示行号-s&#xff1a;压缩连续的空行&#xff0c;只显示一个空行2.chattr 改变文件属性 语法&#xff1a;chattr [-RV] [/-/<属性>][文件或目录] 属性&#xff1a;a&#xff1a;让文件或目录仅供附加用途i&#xff1a;不得任意更…...

opencv-python图像增强一:传统图像去噪方法整理

一、简介&#xff1a; 在数字图像处理领域&#xff0c;噪声一直是影响图像质量的重要因素。无论是拍摄过程中的环境干扰&#xff0c;还是传输过程中的信号失真&#xff0c;噪声都可能导致图像模糊、细节丢失&#xff0c;甚至影响后续的图像分析和应用。为了提高图像的视觉效果…...

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中类的构造方法的描述&#xff0c;正确的是&#xff08;&#xff09; A.构造方法的返回类型为void B.可以定义一个类而在代码中不写构造方法。 C.在同一个类中定义的重载构造方法不可以相互调用。 D.子类不允许调用父类的构造方法。 正确答案…...

C# TreeView

添加 TreeView 控件&#xff1a;定义节点&#xff1a;添加节点&#xff1a;设置节点属性&#xff1a;处理节点事件&#xff1a;自定义节点绘制&#xff1a;数据绑定&#xff1a;节点选择&#xff1a;节点展开和折叠&#xff1a;搜索和过滤&#xff1a;示例代码总结 C# 中的 Tre…...

通过xshell使用密钥连接阿里云服务器

目录 步骤1&#xff1a;创建密钥对 步骤2&#xff1a;连接服务器 步骤3&#xff1a;连接服务器 连接阿里云服务器有几种方式&#xff0c;例如有密码进行连接&#xff0c;但是密码连接安全风险较大&#xff0c;所以我们选择密钥方式进行连接。操作简单且安全性高 步骤1&…...

<数据集>路面坑洼识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;681张 标注数量(xml文件个数)&#xff1a;681 标注数量(txt文件个数)&#xff1a;681 标注类别数&#xff1a;1 标注类别名称&#xff1a;[pothole] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对类…...

几个常用脚本

系统初始化 #!/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&#xff08;Google Test&#xff09;是Google开发的一个开源的C测试框架&#xff0c;它提供了多种宏来支持不同类型的测试。其中&#xff0c;TEST、TEST_F和TEST_P是三个常用的宏&#xff0c;它们各自有不同的用途和特性。以下是它们之间的主要区别&#xff1a; TEST 用…...

VS2022如何调出输出窗口,并在输出窗口打印日志

在输出窗口打印 System.Diagnostics.Debug.WriteLine("这是一行自定义的输出。Debug.WriteLine");System.Diagnostics.Debug.Write("这是第二行自定义的输出&#xff0c;Debug.Write");System.Diagnostics.Debug.WriteLine("换行");System.Diagn…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...