Java文件IO操作:File类的相关内容
Java文件IO操作
- 一、File类
- 1.相对路径和绝对路径
- 2.路径分隔符(同一路径下、多个路径下)
- 3.实例化
- 4.常见方法
一、File类
File类继承自Object类,实现了Serializable接口和Comparable接口;
File类属于java.io包;
File类是文件或者文件目录的一种抽象表示,即可使用File类的具体实例化对象表示文件或者文件目录;
File类只能对文件或文件目录进行一个抽象表示,可对其属性特征进行一定的描述,而如果想要对文件内容进行读写则需要借助IO流(具体地,将File对象作为IO流构造器参数);
1.相对路径和绝对路径
基于参考系不同,文件路径描述可分为相对路径和绝对路径
相对路径:相对于该文件当前位置的路径,比如./hello.java表示当前目录下的hello.java文件;
绝对路径:该文件在文件系统中的详细存储位置,比如C:\javase\hello.java,即包括文件所在根目录的路径;
2.路径分隔符(同一路径下、多个路径下)

1)同一路径下
需要注意,不同操作系统中路径分隔符是不同的,比如Linux下路径分隔符为斜杠/,而Windows系统中为反斜杠\,但在java语言中反斜杠用于特殊字符转义,故在java中Windows系统的路径分隔符为\\。由于Java主打“一次编译,到处运行”,故代码编写时若不统一路径分隔符会导致在不同的操作系统上运行程序时会出现异常。Java官方为解决该问题,在File类中提供一静态属性separator,自动获取当前操作系统的路径分隔符。
使用方法如下:
File.separator
举例:
C:\\javase\\hello.java可在代码中表示为:C:+File.separator+javase+File.separator+hello.java
File.separator为字符串类型,故使用“+”进行字符串拼接操作,这种操作看起来比较繁琐,故我们可直接统一使用斜杠/作为路径分隔符即可。
2)多个路径下
此外,为了方便分隔多个路径,如“./xxx/yyy/c.txt;./xxx/yyy/d.txt”表示两个路径,File类提供静态属性pathSeparator进行此操作;
3)输出Windows系统中这四个属性的值:
System.out.println(File.pathSeparator);
System.out.println(File.pathSeparatorChar);
System.out.println(File.separator);
System.out.println(File.separatorChar);
对应输出:
;
;
\
\
3.实例化
提供以下四种构造器,用于创建File类对象:

1)File(String pathname)
pathname可为:
- 具体文件的相对路径或绝对路径;
- 文件目录的相对路径或绝对路径;
需要注意,此处的相对路径必须是相对于该项目根目录而言,及src目录的父目录;
// 其实此时File对象是一个抽象的路径表示// 使用路径字符串表示文件路径或文件目录File f1 = new File("./hello.txt");System.out.println(f1);File f2 = new File("F:\\IDEA_WorkSpace\\JavaIO\\JavaIO\\src\\com\\northsmile\\javaio\\hello.txt");System.out.println(f2);File f3 = new File("../demo");System.out.println(f3);File f4 = new File("F:\\IDEA_WorkSpace\\JavaIO\\JavaIO\\src\\com\\northsmile\\demo");System.out.println(f4);
对应输出:
.\hello.txt
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaio\hello.txt
..\demo
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\demo
2)File(String parent,String child)
- parent为父目录;
- child为父目录下某子目录或文件所在子目录路径;
// 使用父路径(父目录)及子路径(子目录/文件所在子目录路径)构建File f5 = new File("F:\\IDEA_WorkSpace\\JavaIO\\JavaIO\\src\\com", "northsmile");System.out.println(f5);File f6 = new File("F:\\IDEA_WorkSpace\\JavaIO\\JavaIO\\src\\com\\northsmile\\javaio", "hello.txt");System.out.println(f6);
对应输出:
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaio\hello.txt
3)File(File parent,String child)
- parent为File类对象表示的父目录;
- child为父目录下某子目录或文件所在子目录路径;
// 使用File类对象表示父目录,以此结合子路径(子目录/文件所在子目录路径)构建File f7 = new File(f5, "javaio/hello.txt");System.out.println(f7);File f8 = new File(f5, "javaio");System.out.println(f8);
对应输出:
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaio\hello.txt
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaio
4.常见方法
| 方法签名 | 含义 |
|---|---|
| public String getAbsolutePath() | 获取绝对路径 |
| public String getPath() | 获取路径,如创建File对象时填写的pathname |
| public String getName() | 获取文件名或文件目录名 |
| public String getParent() | 获取当前文件或目录的上级目录 |
| public long length() | 获取文件长度,单位为字节数;不能用于获取目录的长度 |
| public long lastModified() | 获该文件或目录最近一次修改时间,单位为毫秒 |
| public String[] list() | 获取指定目录下所有文件名或子目录的名称数组(只有文件名或子目录名) |
| public File[] listFiles() | 获取指定目录下所有文件名或子目录的File数组(路径名均表示为绝对路径形式) |
| public boolean renameTo(File dest) | 将File对象表示的路径重命名 |
| public boolean isDirectory() | 是否为目录 |
| public boolean isFile() | 是否为文件 |
| public boolean exists() | 指定路径是否存在 |
| public boolean canRead() | 指定路径是否可读 |
| public boolean canWrite() | 指定路径是否可写 |
| public boolean isHidden() | 是否为隐藏文件 |
| public boolean createNewFile() | 如果指定文件不存在,则自动创建该文件 |
| public boolean mkdir() | 如果指定目录不存在,则自动创建指定目录。前提是该目录的父目录存在。 |
| public boolean mkdirs() | 如果指定目录不存在,则自动创建指定目录。如果其父目录不存在,会自动为其创建父目录 |
| public boolean delete() | 删除指定文件或目录(只能删除空目录) |
示例1:
如果指定路径在硬盘中真实存在,则在创建File对象时,则会对其属性进行具体赋值,比如文件长度等;反之如果不存在,则保持默认值。
// 针对文件
File file = new File("F:\\IDEA_WorkSpace\\JavaIO\\JavaIO\\src\\com\\northsmile\\javaio\\hello.txt");
System.out.println(file.getAbsolutePath());
System.out.println(file.getPath());
System.out.println(file.getName());
System.out.println(file.getParent());
System.out.println(file.length());
System.out.println(file.lastModified());System.out.println("---------------------------");
// 针对文件目录
File dir = new File("F:\\IDEA_WorkSpace\\JavaIO\\JavaIO\\src\\com\\northsmile");
System.out.println(dir.getAbsolutePath());
System.out.println(dir.getPath());
System.out.println(dir.getName());
System.out.println(dir.getParent());
System.out.println(dir.lastModified());
System.out.println("---------------------------");
String[] fileNames=dir.list();
for (String name:fileNames){System.out.println(name);
}
System.out.println("---------------------------");
File[] files=dir.listFiles();
for (File f:files){System.out.println(f);
}
输出结果:
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaio\hello.txt
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaio\hello.txt
hello.txt
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaio
26
1677138552240
---------------------------
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile
northsmile
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com
1677138472477
---------------------------
demo
javaio
---------------------------
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\demo
F:\IDEA_WorkSpace\JavaIO\JavaIO\src\com\northsmile\javaioProcess finished with exit code 0
示例2:
// 重命名
File file1=new File("hello.txt");
File file2=new File("hi.txt");
System.out.println(file1.renameTo(file2));
renameTo表示将指定路径重命名为目标路径,重命名成功有两个前提:
- 源路径存在,目标路径不存在;
- 源路径-目标路径有两种对应形式:文件-文件或文件目录-文件目录,即可对文件或文件目录进行重命名;
示例3:
File file=new File("hello.txt");System.out.println(file.isDirectory());System.out.println(file.isFile());System.out.println(file.exists());System.out.println(file.canRead());System.out.println(file.canWrite());System.out.println(file.isHidden());
输出结果:
false
true
true
true
true
false
示例4:
File file=new File("hi.txt");if (!file.exists()){ // 如果该文件不存在System.out.println("文件创建成功:"+file.createNewFile());}else{System.out.println("文件已存在,即将删除该文件。");System.out.println("删除成功:"+file.delete());}
File dir = new File("./testMkdir/demo");
if (!dir.exists()){if (dir.mkdir()){System.out.println("目录创建成功");}else{System.out.println("目录创建失败");}}else{System.out.println("删除该空目录:"+dir.delete());
}
File dir = new File("./testMkdir/demo");if (!dir.exists()){if (dir.mkdirs()){System.out.println("目录创建成功");}else{System.out.println("目录创建失败");}}else{System.out.println("删除该空目录:"+dir.delete());}
相关文章:
Java文件IO操作:File类的相关内容
Java文件IO操作一、File类1.相对路径和绝对路径2.路径分隔符(同一路径下、多个路径下)3.实例化4.常见方法一、File类 File类继承自Object类,实现了Serializable接口和Comparable接口; File类属于java.io包; File类是文…...
竣达技术 | 巡检触摸屏配合电池柜,电池安全放首位!
机房蓄电池常见的故障 1.机房电池着火和爆炸 目前在数据机房蓄电池爆炸着火事故频发,导致业主损失严重。一般机房电池是由于其中一节电池裂化后未妥善管理,电池急剧恶化导致爆炸着火。由于电池是串联及并联在使用,只要一节着火燃烧整片瞬间…...
什么是自动化运维?为什么选择Python做自动化运维?
“Python自动化运维”这个词,想必大家都听说过,但是很多人对它并不了解,也不知道是做什么的,那么你对Python自动化运维了解多少呢?跟着蛋糕往下看。 什么是Python自动化运维? 随着技术的进步、业务需求的快速增长,…...
【经验】移植环境requirement时报错
问题描述 在使用pip freeze > ./requirements.txt和pip install -r requirement.txt (requirements.txt文件用来记录当前程序的所有依赖包及其精确版本号)从一台电脑移植到另一台电脑的 conda 环境时,出现了一堆类似的报错: E…...
计算机专业要考什么证书?
大家好,我是良许。 从去年 12 月开始,我已经在视频号、抖音等主流视频平台上连续更新视频到现在,并得到了不错的评价。 视频 100% 原创录制,绝非垃圾搬运号,每个视频都花了很多时间精力用心制作,欢迎大家…...
一个列表引发的思考(简单版)
最近老板让我按照设计图写一个页面,不嫌丢人的说这是我第一次写页面,哈哈哈。 然后设计图里有一个这样的需求,感觉挺有意思的。 为什么感觉有意思呢,因为这个列表它前面是图片,然后单行和双行的不一样。(请…...
Protobuf 学习简记(三)Unity C#中的序列化与反序列化
Protobuf 学习简记(三)Unity C#中的序列化与反序列化对文本的序列化与反序列化内存二进制流的序列化与反序列化方法一方法二参考链接对文本的序列化与反序列化 private void Text() {TestMsg1 myTestMsg new TestMsg1();myTestMsg.TestInt32 1;myTest…...
Flask入门(10):Flask使用SQLAlchemy
目录11.SQLAlchemy11.1 简介11.2 安装11.3 基本使用11.4 连接11.5 数据类型11.6 执行原生sql11.7 插入数据11. 8 删改操作11.9 查询11.SQLAlchemy 11.1 简介 SQLAlchemy的是Python的SQL工具包和对象关系映射,给应用程序开发者提供SQL的强大功能和灵活性。它提供了…...
我的 System Verilog 学习记录(4)
引言 本文简单介绍 System Verilog 语言的 数据类型。 前文链接: 我的 System Verilog 学习记录(1) 我的 System Verilog 学习记录(2) 我的 System Verilog 学习记录(3) 数据类型简介 Sys…...
Git : 本地分支与远程分支的映射关系
概述 本文介绍 git 环境中本地分支与远程分支的映射关系的查看和调整。 1、查看本地分支与远程分支的映射关系 执行如下命令: git branch -vv注意就是两个 v ,没有写错。 可以获得分支映射结果: dev fa***** [github/dev] update * main…...
运维必看|跨国公司几千员工稳定访问Office365,怎么实现?
【客户背景】本次分享的客户是全球传感器领域的领导者,其核心产品为电流和电压传感器,被广泛应用于驱动和焊接、可再利用能源以及电源、牵引、高精度、传统和新能源汽车等领域。 作为一家中等规模的全球化公司,该公司在北京、日本、西欧、东欧…...
Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜
本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选、掩膜的操作。本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).tif格式栅格产品(下称“自…...
Vue3:有关v-model的用法
目录 前言: 回忆基本的原生用法: 原生input的封装: 自定义v-model参数: 对el-input的二次封装: 多个v-model进行绑定: v-model修饰符: v-model自定义参数与自定义修饰符的结合: 前言&am…...
CF1692C Where‘s the Bishop? 题解
CF1692C Wheres the Bishop? 题解题目链接字面描述题面翻译题目描述题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示代码实现题目 链接 https://www.luogu.com.cn/problem/CF1692C 字面描述 题面翻译 题目描述 有一个888\times888的棋盘,列编号从…...
Jenkins集成Allure报告
Jenkins集成Allure报告 紧接上文:Jenkins部署及持续集成——傻瓜式教程 使用Allure报告 1、在插件库下载Allure插件Allure Jenkins Plugin 2、在构建后操作中加入allure执行的报告目录(相对于项目的路径) 3、run.py代码改成如下 import p…...
【数据结构】AVL树
AVL树一、AVL树的概念二、AVL的接口2.1 插入2.2 旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋三、验证四、源码一、AVL树的概念 当我们用普通的搜索树插入数据的时候,如果插入的数据是有序的,那么就退化成了一个链表,搜索效率…...
这一次我不再低调,老板法拉利的车牌有我的汗水
起源: 5Why分析法最初是由丰田佐吉提出的,后来,丰田汽车公司在发展完善其制造方法学的过程中持续采用该方法。5Why分析法作为丰田生产系统的入门课程之一,是问题求解的关键培训课程。丰田生产系统的设计师大野耐一曾将5Why分析法描述为:“丰田科学方法的基础,重复五次,问…...
通过连接另一个数组的子数组得到一个数组
给你一个长度为 n 的二维整数数组 groups ,同时给你一个整数数组 nums 。 你是否可以从 nums 中选出 n 个 不相交 的子数组,使得第 i 个子数组与 groups[i] (下标从 0 开始)完全相同,且如果 i > 0 ,那么…...
公派访问学者的申请条件
知识人网海外访问学者申请老师为大家分享公派访问学者申请的基本条件以及哪些人员的申请是暂不受理的,供大家参考:一、 申请人基本条件:1.热爱社会主义祖国,具有良好的思想品德和政治素质,无违法违纪记录。2.具有良好专…...
多点电容触摸屏实验
目录 一、简介 二、硬件原理 编辑1、CT_INT 2、I2C2_SCL和I2C2_SDA 3、RESET复位引脚 三、FT54x6/FT52x6电容触摸芯片 四、代码编写 1、编写ft5426.h 2、编写ft5426.c 3、main函数 一、简介 电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
