[Java EE] 文件IO(一):文件概念与文件系统操作

🌸个人主页:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343
🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482
🧀Java EE(94平均质量分) https://blog.csdn.net/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482
🍭MySql数据库(93平均质量分)https://blog.csdn.net/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482
感谢点赞与关注~~~
在这里插入图片描述

目录

  • 1. 认识文件
    • 1.1 文件的两种定义方法
    • 1.2 什么是IO
    • 1.3 文件在计算机中的储存形式
    • 1.4 文件路径(path)
    • 1.5 文件的分类
  • 2. Java中的文件操作
    • 2.1 File的属性,构造方法,成员方法.
      • 2.1.1 属性
      • 2.1.2 构造方法
      • 2.1.3 成员方法

1. 认识文件

1.1 文件的两种定义方法

文件的定义方法分为狭义上的文件和广义上的文件,狭义上的文件就是:针对硬盘这种持久化存储的I/O设备,当我们想要进⾏数据保存时,往往不是保存成⼀个整体,⽽是独⽴成⼀个个的单位进⾏保存,这个独⽴的单位就被抽象成⽂件的概念,就类似办公桌上的⼀份份真实的⽂件⼀般.通俗地来说,就是平时我们保存在硬盘上上的文件,就是狭义上的文件.
狭义文件
广义上的文件就是:操作系统把很多的资源,包括硬件资源和软件资源,全部都抽象成了文件.
在这里插入图片描述

[问题] 文件夹是不是文件呢?
是的,文件类型不仅仅包括图片文件,影像文件等.我们平时用户叫的文件夹,专业一点讲叫做目录文件,简称目录.

1.2 什么是IO

IO是input和output的缩写,叫做输入和输出,这里的输入和输出的方向统一以CPU为参照来看.
在这里插入图片描述
向着CPU方向来的,叫做输入,反着CPU方向来的,叫做输出.

1.3 文件在计算机中的储存形式

随着文件越来越多,我们必须对文件进行有序地组织,组织方式是按照层级的结构进行组织,也就是我们数据结构中学习到的树形结构,即文件和文件之间有着明显的嵌套关系文件在计算机中统一以树形结构来存储,它是一颗N叉树结构.
windows操作系统中的树形结构

1.4 文件路径(path)

如何在文件系统中定位我们唯一一个文件呢?树中的每一个结点都可以被一条从根开始,一直到达结点的路径所描述,这种描述方式称为绝对路径.在windows操作系统中,根节点以盘符开头,目录和目录之间用"/“或者”"隔开.
例如:
D:\personal\Java\MySQL\mysql-connector-java-5.1.47.jar
在这里插入图片描述
除了可以从根节点开始之外,还可以从任意结点出发,进行路径描述,而这种描述方式,叫做相对路径,当前目录用".“表示,上一级目录用”…"表示.
例如:
当前所在目录为MySQL

  • ./mysql-connector-java-5.1.47.jar
  • ../MySQL/mysql-connector-java-5.1.47.jar

举例:大一新生去上课
大一新生刚来到大学,不知道大学中的教学楼都在哪里,于是在上第一节课的时候就会问路上的学长学姐:"学长,行思楼的A202教室在哪里?"于是学长便告诉了他:"直走之后右转到行思楼,进入教学楼之后,左转进入A座,上二楼一直直走就可以找到(绝对路径)."但是在进入行思楼之后,这位新生又忘记了教室怎么走,于是问楼道里的一个学姐:"学姐,A202教室在哪里."于是学姐并告诉了他:“左转进入A座,上二楼一直直走就可以找到(相对路径).”

[拓展]
有些目录中的文件可以通过在windowsShellPower或者Win+R中输入绝对路径直接运行,存在与环境变量Path中的文件可以直接通过文件名来运行.

1.5 文件的分类

即使是普通⽂件,根据其保存数据的不同,也经常被分为不同的类型,我们⼀般简单的划分为⽂本⽂件和⼆进制⽂件,分别指代保存被字符集编码的⽂本和按照标准格式保存的⾮被字符集编码过的⽂件.文本文件中的内容都是合法的字符,即文本文件中的二进制数据通过编码可以构成合法的字符,但是二进制文件中存啥都可以,在经过系统编码之后,编码出的字符不一定合法.
我们平时常见的:docx,pptx,mp3,mp4,png,jpg等文件都是二进制文件.像txt,md,html,java,c文件都是文本文件.
那么我们如何区分这个文件是二进制文件还是文本文件呢?最简单粗暴的方法,就是使用记事本对这个文件进行打开操作,如果打开之后是一堆乱码,就是二进制文件,如果打开时可以看懂的字,就是文本文件.
二进制文件:
在这里插入图片描述
文本文件:
在这里插入图片描述

2. Java中的文件操作

对Java的文件操作,分为对文件系统的操作(创建文件,删除文件,重命名文件等),和对文件内容操作(读文件,写文件).
Java中通过java.io中的File类来描述一个文件(包括目录).但是需要注意的一点就是有File对象,并不意味着File对象真实存在.如我们在创建一个新文件的时候,文件就不存在.

2.1 File的属性,构造方法,成员方法.

2.1.1 属性

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

在windows操作系统中,分割符可以是正斜杠和反斜杠两种.

2.1.2 构造方法

签名说明
File(File parent,String child)根据父目录 + 孩子文件路径,创建⼀个新的File实例
File(String pathname)根据文件路径创建⼀个新的File实例,路径可以是绝对路径或者相对路径
File(String parent,String child)根据父目录+孩子文件路径,创建⼀个新的File实例,父目录用路径表示

注意:第二个字符串类型的路径中可以是绝对路径的字符串,也可以是相对路径的字符串.但是要注意的一点就是,如果是相对路径的时候,默认的开始目录是当前项目所在的目录.

2.1.3 成员方法

下面这些方法,都是通过调用系统的API来完成对文件的操作的.

修饰符及返回值类型⽅法签名说明
StringgetParent()返回File对象的⽗⽬录⽂件路径
StringgetName()返回FIle对象的纯⽂件名称
StringgetPath()返回File对象的⽂件路径
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()判断用户是否对⽂件有可写权限

常用方法演示:

public static void main(String[] args) throws IOException {//绝对路径File file = new File("D:/personal/Java/java_git/java-learning/Java EE初阶/IoTest.txt");System.out.println(file.exists());//判断文件是否存在System.out.println(file.getAbsolutePath());//输出文件的绝对路径System.out.println(file.getName());//获取文件名System.out.println(file.getParent());//获取文件的父目录System.out.println(file.getCanonicalPath());//输出修饰之后的路径System.out.println(file.isDirectory());//判断文件是否是目录文件System.out.println(file.isFile());//判断文件是否是非目录文件System.out.println(file.renameTo(new File("D:/personal/Java/java_git/java-learning/Java EE初阶/IoTest2.txt")));//因为重命名操作需要传入的是文件类型的数据,不是字符串,我们需要通过new操作来进行对文件路径的包装System.out.println(file.delete());//删除文件}

注意:这里虽然文件不存在,但是也会输出路径.
在这里插入图片描述

[注意]

  • getAbsolutePath()方法中,如果构造方法中给出的是相对路径,那么就只是把当前项目的路径与构造方法中的路径进行简单的拼接,无论这个文件是否存在.其中getCanonicalPath()方法会去掉一些不必要的东西.
public static void main(String[] args) throws IOException {File file = new File("./test.txt");//所写的文件名不一定要存在System.out.println(file.getAbsolutePath());//只是把当前项目所在的路径与文件名进行了简单的拼接System.out.println(file.getCanonicalPath());//去掉了一些没有必要的东西}

运行结果:
在这里插入图片描述

  • mkdir()和mkdirs()方法,前者用来创建单层目录,后者可以通过用斜杠隔开创建双层目录.
public static void main(String[] args) {File file = new File("./aaa/bbb/test");System.out.println(file.mkdirs());//创建目录,包含中间目录File file1 = new File("ccc");System.out.println(file1.mkdir());//创建目录}

运行之后:
在这里插入图片描述

  • 创建文件createNewFile()有时会失败,所以在含有该方法的方法中,我们要给出throws IOException异常.
  • deleteOnExit()方法,在执行到这个方法的时候并不会立即删除文件,而是在该调用该方法的线程结束之后才会删除该文件.
public static void main(String[] args) throws IOException {File file = new File("./test.txt");System.out.println(file.createNewFile());file.deleteOnExit();//在主线程结束之后才删除文件System.out.println(file.exists());//在主线程结束之前,文件仍然存在}

运行结果:
在这里插入图片描述此时我们可以看到,最后一个方法返回的是true.
这个方法也在我们的日常开发中有着广泛的应用.比如系统中有一些"临时文件"需要再进程结束之后再删除掉.

  • 在对文件进行重命名的时候,传入方法中的对象是一个文件类型的对象,我们不可以直接传入字符串,我们需要在方法中通过new File(String s)的办法来创建一个新文件.
public static void main(String[] args) throws IOException {File file = new File("D:/personal/Java/java_git/java-learning/Java EE初阶/IoTest.txt");System.out.println(file.createNewFile());System.out.println(file.renameTo(new File("D:/personal/Java/java_git/java-learning/Java EE初阶/IoTest2.txt")));//因为重命名操作需要传入的是文件类型的数据,不是字符串,我们需要通过new操作来进行对文件路径的包装}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 每日一题 ---- 【2391.收集垃圾的最少总时间】

LeetCode 每日一题 ---- 【2391.收集垃圾的最少总时间】 2391.收集垃圾的最少总时间方法:模拟(多次遍历) 2391.收集垃圾的最少总时间 方法:模拟(多次遍历) 需要注意的点是,处理一个单位的一个…

mysql分页排序的坑,千万注意!

1、问题复现 现象: mysql对无索引字段进行排序后limit ,当被排序字段有相同值时并且在limit范围内,取的值并不是正常排序后的值,有可能第一页查询的记录,重复出现在第二页的查询记录中,而且第二页的查询结…

青少年软件编程(Python)等级考试试卷(四级)2024年3月

电子学会2024.03青少年软件编程(Python)等级考试试卷(四级) 一、单选题 1.运行如下代码,若输入整数3,则最终输出的结果为? ( ) def f(x): if x1: s1 else: sf(x-1)*x return s nint(input("请…

Java RMI SERVER命令执行漏洞

Java RMI SERVER命令执行漏洞 一、介绍二、原理三、复现准备四、漏洞复现 一、介绍 RMI全称是Remote Method Invocation(远程方法调用),是专为Java环境设计的远程方法调用机制,远程服务器提供API,客户端根据API提供相…

java性能分析async-profiler

项目地址 github:https://github.com/async-profiler/async-profiler cpu ./asprof -d 600s -f cpu.html pidcpu-wall:表示抓取所有状态下的线程数据,包含:Running, Sleeping or Blocked ./asprof -e wall -d 600s -f cpu-wall…

TypeScript 工具类型

这些工具类型是 TypeScript 提供的强大功能&#xff0c;用于操作和转换类型。下面是每个工具类型的简要说明和示例&#xff1a; 1、Record let value: Record<string, any> { name: "", age: 0, desc: [] }; let value2: { [key: string]: any } { name: &…

java生成二维码合并海报并加上文字

1.生成二维码 public static byte[] generateQRCodeImages(String text, int width, int height) throws WriterException, IOException {String binary null;QRCodeWriter qrCodeWriter new QRCodeWriter();//调整白边大小Hashtable<EncodeHintType, Object> hints n…

微信小程序新技能解锁:轻松实现二维码扫描与识别

微信小程序新技能解锁&#xff1a;轻松实现二维码扫描与识别 在移动互联网时代&#xff0c;二维码已成为连接线上线下的桥梁&#xff0c;而微信小程序作为轻量级应用的代表&#xff0c;自然也少不了二维码扫描与识别的功能。本文将手把手教你如何在微信小程序中集成这项实用功…

【3dmax笔记】020:变换输入、世界坐标、屏幕坐标案例详解

文章目录 一、变换输入二、世界坐标三、屏幕坐标四、区别一、变换输入 变换输入可用于:移动/旋转/缩放变换输入,快捷键为F12,在变换输入窗口中,有两种常见重要的坐标系: 世界坐标:固定屏幕坐标:随着选择的视图发生变化在3ds Max中,世界坐标(World Coordinate System)…

Git Bash和Git GUI设置中文的方法

0 前言 Git是一个分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。一般默认语言为英文&#xff0c;本文介绍修改Git Bash和Git GUI语言为中文的方法。 1 Git Bash设置中文方法 &#xff08;1&#xff09;鼠标右键&#xff0c;单击“Git B…

网络无线网卡无法配置正确的 dns 服务器

网络无线网卡无法配置正确的 dns 服务器--解决办法 网络无线网卡无法配置正确的 dns 服务器--解决办法 网络无线网卡无法配置正确的 dns 服务器–解决办法 建议先使用疑难反馈&#xff08;自带的&#xff09; 打开网络适配中心 之后更改适配器设置&#xff0c;在点击 wlan 属…

【linux】linux工具使用

这一章完全可以和前两篇文件归类在一起&#xff0c;可以选择放一起看哦 http://t.csdnimg.cn/aNaAg http://t.csdnimg.cn/gkJx7 拖更好久了&#xff0c;抱歉&#xff0c;让我偷了会懒 1. 自动化构建工具 make , makefile make 是一个命令&#xff0c;makefile 是一个文件&…

jdk安装使用(Linux)

文章目录 JDK在Linux的安装Linux运行打包好的springboot项目停止在Linux服务器上运行的Spring Boot应用程序 JDK在Linux的安装 在Linux上安装JDK&#xff08;Java Development Kit&#xff09;可以通过以下步骤完成&#xff1a; 下载JDK安装包&#xff1a; 访问Oracle官方网站…

【Java】变量类型

类变量&#xff1a;独立于方法之外的变量&#xff0c;用static修饰实例变量&#xff1a;独立于方法之外的变量&#xff0c;不过没有static修饰局部变量&#xff1a;类的方法中的变量 示例1&#xff1a; public class test_A {static int a;//类变量(静态变量)String b;//实例…

Mysql 日志(redolog, binlog, undoLog)

重做日志-redolog 是什么 innoDB存储引擎层面的日志&#xff0c;它的作用是当 数据更新过程中数据库发生异常导致提交的记录丢失 为什么 mysql的基本存储结构是页&#xff08;记录都在页里面&#xff09;&#xff0c;所以更新语句时&#xff0c;mysql需要先把要更新的语句找…

Softing工业推出的edgeConnector将Allen-Bradley控制器集成到工业边缘应用中

2024年4月17日&#xff08;哈尔&#xff09;&#xff0c;Softing宣布扩展其基于Docker的edgeConnector产品系列&#xff0c;推出了新软件模块edgeConnector Allen Bradley PLC&#xff0c;可方便用户访问来自ControlLogix和CompactLogix控制器数据。 &#xff08;edgeConnector…

Linux提权--定时任务--打包配合 SUID(本地)文件权限配置不当(WEB+本地)

免责声明:本文仅做技术交流与学习... 目录 定时任务 打包配合 SUID-本地 原理: 背景: 操作演示: 分析: 实战发现: 定时任务 文件权限配置不当-WEB&本地 操作演示: 定时任务 打包配合 SUID-本地 原理: 提权通过获取计划任务执行文件信息进行提权 . 1、相对路径和…

Rust中忽略JSON反序列化时的不必要字段

在Rust中处理JSON数据时&#xff0c;经常会遇到JSON数据中包含一些在目标数据结构中不存在的字段的情况。如果你使用的是serde和serde_json这两个流行的库来处理JSON&#xff0c;那么有一些简单的方法可以忽略这些不必要的字段。 默认行为&#xff1a;忽略未知字段 在Rust中&…

人工智能专业(科普)

Ⅰ 简介 人工智能&#xff08;Artificial Intelligence&#xff09;是中国普通高等学校本科专业。人工智能&#xff0c;是一个以计算机科学为基础&#xff0c;由计算机、心理学、哲学等多学科交叉融合的交叉学科、新兴学科&#xff0c;研究、开发用于模拟、延伸和扩展人的智能…

在vue3中,如何优雅的使用echarts之实现大屏项目

前置知识 效果图 使用技术 Vue3 Echarts Gasp Gasp&#xff1a;是一个 JavaScript动画库,它支持快速开发高性能的 Web 动画。在本项目中&#xff0c;主要是用于做轨迹运动 所需安装的插件 npm i echarts npm i countup.js 数字滚动特效 npm i gsap javascript动画库 np…