【JavaEE】文件操作IO

文件操作IO


文章目录


前言

IO 即 Input(输入)和 Output(输出)。以计算机为视角,程序员向计算机写入数据即为输入。

一、文件概念

文件存储在硬盘中。操作系统对硬盘进行了封装,而 Java 又对操作系统进行了封装。因此,对于 Java 开发者而言,想要操作硬盘,只需调用文件相关的 API 即可。文件本质上是操作系统对硬盘上数据进行抽象封装的体现。

文件分为普通文件和目录文件(文件夹),其保存结构为树形结构。

二、路径

使用"路径"来描述某个文件或目录所在的位置。

  1. 绝对路径 :从盘符开始书写的路径。例如:D:\JavaDamo\Trae-cn\picture-demo\src\main\resources

  2. 相对路径:以某个基准目录为起点,从该目录出发找到目标文件。例如:

    • 以 D:\JavaDamo\Trae-cn\picture-demo\src\main 为基准,相对路径为 .\resources
    • 以 D:\JavaDamo\Trae-cn\picture-demo 为基准,相对路径为 .\src\main\resources
    • 若要找 main 下的 Java 目录,则以 D:\JavaDamo\Trae-cn\picture-demo\src\main\resources 为基准,相对路径为 .\Java

. 表示当前目录

.. 表示上一级目录

三、斜杠

如果路径以 .\ 开头,可以省略。相对路径是常用的表示方式。

上述示例中使用 \ 作为目录之间的分隔符,使用 / 也是可以的。更正统的做法是:/ 叫斜杠,\ 叫反斜杠,二者有固定定义。尤其在代码中,使用 \(尤其是在字符串里)需要转义,因此推荐使用斜杠 /。

四、文件类型

文件的分类方式有多种,如普通文件、目录文件、视频文件、音频文件等。

站在文件存储的角度,可分为:

  • 文本文件:内部存储的内容是"字符串",每个部分都是一个"字符"。
  • 二进制文件:无格式限制,可存储任意数据。

操作文件前,需要先判断文件是文本文件还是二进制文件,因为二者的编码方式存在差异。分辨方法:用记事本打开文件,若出现乱码则为二进制文件。

五、操作

  1. 文件系统操作
    文件系统是操作系统对于文件管理的子模块 , 对文件进行创建移动查看目录等操作
  2. 文件内容操作
    对文件进行读和写

六、系统操作file类 , 不用背

常用构造方法

File(String path) 这里面放路径 , 一个File就对应一个文件/目录 , 可以是绝对路径 , 也可以是相对对路径 , 相对路径的基准路径是取决于程序运行时所在的工作目录

File对象定义的时候 , 指定的路径不一定非要存在 , 他有一个功能 , 创建的文件 , 但只是在内存中创建 , 不会真的在硬盘上

相对路径的时候 , 会进行化简 , 把./去掉

Demo1看示范案例

String getParent() 返回 File 对象的⽗⽬录⽂件路径
String getName() 返回 FIle 对象的纯⽂件名称
String getPath() 返回 File 对象的⽂件路径
String getAbsolutePath() 返回 File 对象的绝对路径
String getCanonicalPath() 返回 File 对象的修饰过的绝对路径

创建文案这个方法有可能失败 , 1. 硬盘满了 2. 没有权限

删除这个操作 , 不是放进回收站 , 是直接从硬盘上删除

下面那个删除不是立刻删除 , 是等线程退出后才删除 , 针对临时使用的文件

boolean exists() 判断 File 对象描述的⽂件是否真实存在
boolean isDirectory() 判断 File 对象代表的⽂件是否是⼀个⽬录
boolean isFile() 判断 File 对象代表的⽂件是否是⼀个普通⽂件
boolean createNewFile() 根据 File 对象,⾃动创建⼀个空⽂件。成功创建后返回 true
boolean delete() 根据 File 对象,删除该⽂件。成功删除后返回 true
void deleteOnExit() 根据 File 对象,标注⽂件将被删除,删除动作会到 JVM 运⾏结束时才会进⾏

修饰符及返回值类型 ⽅法签名 说明

String\[\] list() 返回 File 对象代表的⽬录下的所有

⽂件名

File\[\] listFiles() 返回 File 对象代表的⽬录下的所有

⽂件,以 File 对象表⽰

加上s表示我们支持创建一组路径

boolean mkdir() 创建 File 对象代表的⽬录

boolean mkdirs() 创建 File 对象代表的⽬录,如果必

要,会创建中间⽬录

在操作系统中 , 重命名和移动都是同一个操作 , 就看目标改为一个什么样的路经 , 如果保持前面的路径不变 , 只是把名字改一下就不是移动 , 如果前面的路径也改了 , 就会产生移动效果了

boolean renameTo(File dest) 进⾏⽂件改名,也可以视为我们平

时的剪切、粘贴操作

boolean canRead() 判断⽤⼾是否对⽂件有可读权限

boolean canWrite() 判断⽤⼾是否对⽂件有可写权限


文件内容操作

主要两个操作

读和写

针对文件内容操作 , Java标准库操作采用了一组流对象(一组类)表示

Java标准库中 , 分出了两个大类 ,

字节流

读写的时候 , 以字节为单位 , 适合处理二进制文件

InputStream 输入 , 只需要读

OutputStream

都是抽象类

对应了若干子类

FileInoutStream

FileOutputStream

字符流

读写的时候 , 以字符为单位 , 适合处理文本文件

Reader

Writer

都是抽象类 , 对应了若干子类

FileReader

FileWriter

微信

一开始用try catch

有catch了不一定执行到close

把它放到finally里面,不在作用域内

InputStream在try外面创建对象

太丑了

用try with resources,括号里面创建,自动close

读到末尾返回-1

一个try里面可以定义多个流对象 , 多个流对象之间可以使用 ; 分割

用outputstream , 默认情况下 , 打开文件会先清空文件内容 , 但我们可以加第二个参数true让他不清空

write一次写一个字节 , 一次写一个完整字节数组 , 写字节数组的一部分可以定义从数组的哪里开始写写多长

read一次第一个字符,一次读一个字符数组,和上面一样就是封装一下,第四个read(byte\[\] b, int off, int len) Java IO

三个参数 1. b:byte数组,缓冲区,读到的数据存到这个数组里​2。 off(offset偏移量):从数组 b 的第off下标位置开始存放读到的数据​3. len:最多读取len个字节(不是一定读到len个,只是上限)

读到末尾返回-1

writer使用最多的直接传入一个字符串


Scanner搭配inputstream

PrintWriter可以进行格式化输出

printwriter.print("%d+%d=%d" , 12,13,25);


关闭文件


总结

相关推荐
十年Java程序媛1 小时前
Redis 分布式锁 + GZIP 压缩缓存踩坑|高并发缓存真实线上复盘
java·开发语言·spring boot·redis·分布式·缓存·面试
顽疲2 小时前
Java vue 养老系统源码详解:入住核算单 live-check 缴费入账与预交金收据实践
java·vue.js·python·java 养老·springboot 养老·vue养老
共饮一杯无2 小时前
LiveKit本地录制落盘路径排查与修复实践
java·go·livekit
StevenLdh2 小时前
第八期 · 情绪闯关挑战盒:一个「无惩罚」成就系统的数据建模
java·微信小程序
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务消费者
java·dubbo·交友
IT研究室2 小时前
最新计算机毕业设计选题推荐-基于spring boot的教育学习平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
亚林瓜子2 小时前
Spring Boot 集成 ip2region 离线 IP 库实战指南
java·spring boot·后端·ip·ip2region
盛世宏博智慧档案3 小时前
恒湿净化一体机联动开发:档案馆温湿度阈值判断与启停控制实践
java·后端·struts·恒湿机·加湿除湿消毒净化一体机
vipxieliang3 小时前
ValidX 应用于 HR系统员工信息验证:入职、离职、社保数据
java·spring boot·后端