[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操作来进行对文件路径的包装
        }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vscode怎么设置背景图片?

vscode背景图片是可以自己设置的,软件安装后默认背景的颜色是黑色的,这是默认的设计,如果要修改背景为指定的图片,那么我们需要安装插件,然后再通过代码来设置背景图片的样式,下面我们就来看看详细的教程。…

大数据交通行政执法监测系统

交通行政执法监测系统应用系统按照监测主体可分为:出租车交通违法监测,客车交通违法监测,货车、危化品车辆交通违法监测,非法营运车辆监测。功能模块涵盖:特征识别、档案查询、预警分析等。 (1)…

java中EQ、NE、GE、GT、LE、LT

关系运算符 包括EQ、NE、GE、GT、LE、LT几个,关系运算符返回的是真“True”或假“False”。 eq(Equal to) 等 运算符 ,如果运算符两边相同则返回真,否则返回假; ne(Not Equal to) 不…

力扣HOT100 - 55. 跳跃游戏

解题思路&#xff1a; class Solution {public boolean canJump(int[] nums) {int n nums.length;int maxReach 0;// 正常来说每次至少跳一格&#xff0c;所以最多循环n次for (int i 0; i < n; i) {if (i > maxReach) return false;// 这种情况代表遇到了0&#xff0…

使用train.py----yolov7

准备工作 在训练之前&#xff0c;数据集的工作和配置环境的工作要做好 数据集&#xff1a;看这里划分数据集&#xff0c;训练自己的数据集。_划分数据集后如何训练-CSDN博客 划分数据集2&#xff0c;详细说明-CSDN博客 配置环境看这里 从0开始配置环境-yolov7_gpu0是inter g…

11、关系运算符、逻辑运算符(讲解 和 的区别)、赋值表达式、三目表达式、运算符优先级(超详细版本)+结合性的分析

这里写目录标题 一、关系运算符&#xff08;比较运算符&#xff09;二、⭐逻辑运算符1、 && 和 &2、|| 或 |3、&#xff01;4、^ 三、赋值运算符四、三目运算符&#xff08;条件运算符&#xff09;五、运算符优先级 在讲之前先明确几个概念&#xff1a; 1、单目运算…

【Arduino】ESP32/ESP8266 JSON格式解析

目录 1、JSON 2、JSON语法格式 基本概念&#xff1a; 语法规则&#xff1a; 数据类型&#xff1a; 示例&#xff1a; 3、JSON解析 单一对象JSON解析&#xff08;无嵌套&#xff09; JSON数组解析 使用ArduinoJson官网在线工具解析JSON信息 ESP8266闪存存储的JSON解析…

VScode 修改 Markdown Preview Enhanced 主题与字体

VScode 修改 Markdown Preview Enhanced 主题与字体 1. 修改前后效果对比2. 修改主题2.1 更改默认主题2.2 修改背景色 3. 修改字体 VS Code基础入门使用可查看&#xff1a; VS Code 基础入门使用&#xff08;配置&#xff09;教程 其他Vs Code 配置可关注查看&#xff1a; Vs C…

ElasticSearch 与 OpenSearch:拉开性能差距

Elasticsearch 与 OpenSearch&#xff1a;扩大性能差距 对于任何依赖快速、准确搜索数据的组织来说&#xff0c;强大、快速且高效的搜索引擎是至关重要的元素。对于开发人员和架构师来说&#xff0c;选择正确的搜索平台可以极大地影响您的组织提供快速且相关结果的能力。在我们…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

在xAnyLabeling中加载自己训练的yolov8s-obb模型进行半自动化标注

任务思路&#xff1a; 先使用xAnyLabeling标注一部分样本&#xff0c;训练出v1版本的yolov8-obb模型&#xff0c;然后加载yolov8-obb模型到xAnyLabeling中对其余样本进行半自动化标注。节省工作量。 任务流程&#xff1a; 1.准备xAnyLabeling标注工具 下载代码&#xff0c;…

Linux 第二十八章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

利用PS在不伤背景的前提下根据颜色去除图像上不想要的内容

下面为一个例子&#xff0c;去除图像上红色的虚线 Step1.用套索工具框选带有颜色的部分 Step2.切换到魔术棒工具&#xff0c;上端选项中&#xff0c;点击与选区交叉&#xff0c;连续这一项不要勾选 Step3.在需要去除的部分点击一下即可在框选范围内选中所有同颜色的区域&#x…

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…

Cross-Image Attention for Zero-Shot Appearance Transfer——【代码复现】

本文发表于SIGGRAPH 2024&#xff0c;是一篇关于图像编辑的论文&#xff0c;Github官网网址如下&#xff1a; garibida/cross-image-attention&#xff1a; “Cross-Image Attention for Zero-Shot Appearance Transfer”的正式实现 (github.com) 一、基本配置环境准备 请确保…

数组实现循环队列

1、分析 循环队列最主要的特点为当前面的空间被pop后&#xff0c;后面的数据可以插入到前面空余的数据中去&#xff1b; 所以最难的部分为判断什么时候为空什么时候为满&#xff1a; a、空满问题 我们先来分析当数据满时&#xff0c;head和tail相等&#xff08;tail认为是指…

架构设计之学新而知故

缘由 因为一些特殊的机缘&#xff0c;接触到洋葱架构等一些新架构设计概念。 尝试理解了一段时间&#xff0c;就想简单梳理下对它们的理解&#xff0c;以达到学新而知故 &#x1f603; 信息增益 以前计算机专业并不设置通信领域的信息论的专业课程&#xff0c;但是&#xf…

条件变量解决同步问题之打印金鱼

说明 本代码为jyy老师上课演示条件变量解决同步问题示例(本人只做记录与分享) 本人未使用老师封装的POSIX线程库, 直接在单文件中调试并注释 问题描述 有三类线程 T1 若干: 死循环打印< T2 若干: 死循环打印> T3 若干: 死循环打印_ 任务: 对线程同步&#xff0c;使得屏幕…

eNSP中小型园区网络拓扑搭建(下)

→b站直通车&#xff0c;感谢大佬← →eNSP中小型园区网络拓扑搭建&#xff08;上&#xff09;← 不带配置命令的拓扑图已上传~ 配置ospf SW5 # ospf 1 router-id 5.5.5.5area 0.0.0.0network 192.168.51.5 0.0.0.0network 192.168.52.5 0.0.0.0area 0.0.0.10network 192.1…

MATLAB函数fir1的C语言移值

要移值的matlab函数&#xff1a; h3 fir1(16,[0.25 0.50]); C语言版本 #include <iostream> #include <cmath>#define PI acos(-1)double sincEasy(double *x, int len, int index) {double temp PI * x[index];if (temp 0) {return 1.0; // sinc(0) 1}ret…