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

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函数 一、简介 电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

【Oracle】分区表

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

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...