【Java】文件IO

文章目录

文件

硬盘

系统管理文件,引入一个额专门的模块,"文件系统",每个文件都有一个"路径"描述文件所在位置

一、什么是文件

此处谈到的文件,本身有多重含义

狭义的文件,特质硬盘上的文件(以及保存文件的目录)

  • 目录就是平时所说的"文件夹",专业术语叫"目录",目录也是属于文件

广义的文件 ,计算机上的很多硬件设备软件资源,在操作系统中,都会被视为"文件"

  • 标准输入(键盘,System. in)
  • 标准输出(控制台,System. out)
  • 打印机
  • 网卡,操作网络的代码,和操作普通文件,都是非常相似的

二、硬盘

硬盘和内存的对比

空间 速度 成本 数据
硬盘 持久储存
内存 断电后丢失

为什么硬盘的速度慢?


这和它硬件的物理结构直接相关

当下硬盘主要分两类:

1. 机械硬盘

  • 盘片
    • 存储数据的介质
    • 通电之后,就会快速旋转,转速影响到读取数据的速度(7200 转/min、5200 转/min...)
  • 磁头:
    • 可以移动到盘片上的仍以位置进行数据读写
    • 数据的读写时,盘片一边高速旋转,磁头一边不停移动,两者相互配合,完成数据的读写操作

机械硬盘在进行顺序读写时,效率是相对比较高的,因为磁头不用动,盘片高速旋转就好了

但是在随机读写(指哪打哪)的时候,效率就比较低。因为会涉及到磁头移动,就需要克服惯性去做功

在服务器领域,机械硬盘仍然是一个主流的应用场景

机械应盘自己不要拆开!一旦拆开,就报废了。机械硬盘的拆解和维修必须在专门的无尘环境下进行

否则上面落灰尘之后,之后磁盘运行,高速旋转的盘片和移动的磁头将与灰尘碰撞,产生一个很大的冲量,从而将磁头破坏

2. 固态硬盘

  • 大部分电脑上都是这个
  • 更接近于"内存"通过大规模的集成电路,实现的存储功能
  • 固态硬盘能比机械硬盘快 10-20 倍左右
  • 机械硬盘典型的速度,每秒读写 300MB 左右
  • 固态硬盘,每秒达到 3G-6G 都是不难的,好一点的固态,速度能达到 7G-8G

如果你要买固态硬盘,一方面要关注存储容量,也要关注读写速度
对于硬盘来说,尤其是机械硬盘,擅长顺序读写,不擅长随机读写。虽然在固态硬盘上有所改善,但整体来说,固态硬盘的随机读写能力,仍然是非常逊色于内存的

三、文件路径

在一个电脑上,有很多文件,都是需要考操作系统,进行组织管理的

操作系统专门有一个模块,"文件系统"

  • 一般是通过"文件资源管理器 "这个程序,观察到文件系统管理的文件,就是"此电脑"

文件系统上的目录结构,是一个"树形结构",不是二叉树,是"N叉树"

基于上述的结构,我们就可以找到某个文件在电脑上的具体位置

路径中,就约定使用分隔符,分割目录和目录:

  • \(反斜杠)
  • /(斜杠)
    绝大部分系统,都是使用斜杠 \ 作为目录的分隔符,只有 Windows 两种斜杠都能用

路径,也可以认为是文件的一种身份标识,通过标识,区分出唯一的一个文件

表示路径的两种风格

  • 绝对路径,从盘符开始,一直到文件名结束(D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code
  • 相对路径,谈到相对路径,必然有一个"参考系",就是有一个"基准路径"或"工作路径",如果基准目录不同,对应的相对路径也是不同的
    • 比如,此时正在 D:\My Computer\02 Stricky\02 Code\03 IDEA\Gitee\java_code 目录下,要在此目录下找到 240811-Thread 文件,就只需要输入 .\240811-Thread

作为程序员,常用的路径形式都是相对路径。因为绝对路径只适合自己的机器,一旦把你的代码换到比尔呢的机器上,如果代码依赖绝对路径,就可能你自己的电脑上能跑,别人的电脑上跑不起来(这里的绝对路径只在你自己电脑上存在,别人的机器上不存在)

一个程序能正常运行,不仅仅取决于代码,也取决于代码的运行环境。(操作系统版本,第三方库,配置文件,其他目录文件,硬件设备...)

四、文件类型

文本文件.txt/.c/.java

  • 当前文件里存储的所有内容都是"文本"(合法的字符)
  • 虽然叫做文本文件,本质上内部存的还是二进制(0101010),但这些二进制数据都"有据可查",都可以在字符集中找到合法合理的字符

二进制文件.docx/.exe/.dll/.mp3/.mp4/.class

  • 对应的,文件内容在字符集对应的表格中查不到合法合理的字符

!quote\] 字符编码方式(字符集) 中文 UTF8/GBK,字符编码都是很大的"表格"

一个简单粗暴的方式,判断是什么文件:

  • 直接使用记事本打开这个文件,不是乱码,就是文本文件,否则就是二进制文件

针对文本文件来说,其实 Java 已经进行了很多的内置处理。虽然文本文件底层仍然是二进制存储,Jav 啊把文本文件取出来的时候,自动查询码表,把二进制内容一个个转换成字符。而二进制文件则没有上述的转换过程

相关推荐
写bug写bug8 分钟前
你真的会用枚举吗
java·后端·设计模式
喵手1 小时前
如何利用Java的Stream API提高代码的简洁度和效率?
java·后端·java ee
-Xie-1 小时前
Maven(二)
java·开发语言·maven
IT利刃出鞘1 小时前
Java线程的6种状态和JVM状态打印
java·开发语言·jvm
薛晓刚1 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队1 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
开航母的李大1 小时前
软件系统运维常见问题
运维·服务器·系统架构·运维开发
星空下的曙光2 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12012 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
天天摸鱼的java工程师2 小时前
Java 解析 JSON 文件:八年老开发的实战总结(从业务到代码)
java·后端·面试