目录
[一、基础概念:IO、存储、硬盘 是什么](#一、基础概念:IO、存储、硬盘 是什么)
[1. IO 是什么](#1. IO 是什么)
[2. 存储的层级划分](#2. 存储的层级划分)
[3. 硬盘是什么](#3. 硬盘是什么)
[二、重点核心:文件系统(File System)](#二、重点核心:文件系统(File System))
[1. 什么是文件系统](#1. 什么是文件系统)
[2. 文件系统能干什么](#2. 文件系统能干什么)
[3. 常见文件系统类型](#3. 常见文件系统类型)
[Windows 常用](#Windows 常用)
[Linux 常用](#Linux 常用)
[4. 文件系统核心结构](#4. 文件系统核心结构)
[(2)块 / 簇](#(2)块 / 簇)
[(3)inode 节点(Linux 重点)](#(3)inode 节点(Linux 重点))
[5. 文件系统 如何读写文件(全过程)](#5. 文件系统 如何读写文件(全过程))
[6. 文件系统 和 Java IO 的关系](#6. 文件系统 和 Java IO 的关系)
[三、IO、内存、硬盘、文件系统 整体关系总结](#三、IO、内存、硬盘、文件系统 整体关系总结)
前言
平时我们写 Java IO、读写文件、复制文件、上传下载,底层都离不开:IO 流程 → 内存 → 硬盘 → 文件系统。很多人只会写代码,不懂底层原理,一旦遇到乱码、文件损坏、路径问题、分区挂载就懵了。
这篇博客从基础到核心,先讲 IO、存储、硬盘,重点深挖文件系统,通俗易懂,适合学习总结、作业提交、面试复习。
一、基础概念:IO、存储、硬盘 是什么
1. IO 是什么
IO:Input / Output 输入输出
- 输入:从外部设备读数据到内存(读文件、读网络、读键盘)
- 输出:从内存写数据到外部设备(写文件、发网络、打印)
Java 中所有文件读写、字节流、字符流、缓冲流,本质都是内存和硬盘之间的 IO 交互。
2. 存储的层级划分
计算机存储分两大类:
-
内存(主存)
- 断电数据丢失
- 速度极快、容量小、价格贵
- 程序运行时数据都先加载到内存
-
外存(辅存)
- 断电数据不丢失
- 速度慢、容量大、便宜
- 典型:机械硬盘 HDD、固态硬盘 SSD、U 盘、移动硬盘
IO 本质:内存 ↔ 外存(硬盘)的数据搬运。
3. 硬盘是什么
硬盘就是永久存储数据的硬件载体。
- 机械硬盘 HDD:靠磁道、扇区旋转读写,速度慢、便宜
- 固态硬盘 SSD:闪存芯片,无机械结构,速度快、寿命长
关键常识:裸硬盘只能存储 0 和 1 二进制数据,没有文件名、没有文件夹、没有路径 ,电脑无法直接使用,必须格式化并安装文件系统才能正常存放和管理文件。
所以必须要有:文件系统。
二、重点核心:文件系统(File System)
1. 什么是文件系统
文件系统是操作系统管理硬盘数据的一套规则和组织结构。
一句话:
裸硬盘只是一堆二进制空位,文件系统负责把硬盘分区、规划空间、管理文件、管理目录、记录文件位置大小权限。
没有文件系统:
- 不能分文件夹
- 不能有文件名、后缀
- 不能保存文件大小、修改时间
- 我们没法按路径
D:/a/b.txt访问文件
2. 文件系统能干什么
- 把硬盘划分分区、块、簇
- 管理文件、目录(文件夹) 树形结构
- 记录文件元信息:文件名、大小、创建时间、修改时间、权限、存放位置
- 负责文件创建、删除、复制、移动、查找
- 控制磁盘空间分配与回收
3. 常见文件系统类型
Windows 常用
- FAT32:老格式,最大单文件 4GB,兼容性好
- NTFS:Windows 默认,支持大文件、权限、加密、压缩、日志容错
Linux 常用
- Ext3、Ext4:Linux 主流日志文件系统,稳定、高性能
- xfs:大容量服务器常用
移动设备
- exFAT:U 盘、移动硬盘,突破 4GB 限制,跨 Windows/Mac
4. 文件系统核心结构
(1)磁盘分区
一块硬盘可以分成多个分区:C 盘、D 盘、E 盘每个分区独立使用一个文件系统。
(2)块 / 簇
文件系统把整个分区拆分成无数个最小存储单元:
- Windows 叫「簇」
- Linux 叫「块」
文件占用空间按整簇分配 ,哪怕文件只有 1 字节,也要占一整簇。这就是文件实际大小 < 磁盘占用大小 的原因。
(3)inode 节点(Linux 重点)
Linux 文件系统核心就是 inode:
- inode 存放文件元信息:大小、权限、时间、磁盘块位置
- 文件名放在目录里,文件内容在数据块
- 删除文件本质:只是删除目录条目,标记 inode 可复用,数据还在磁盘上(恢复文件原理)
(4)目录树形结构
文件系统把所有文件组织成倒立树形结构:
- 根目录 /下级子目录、子文件
- Windows:
C:\Users\xxx\Desktop- Linux:
/home/xxx/
5. 文件系统 如何读写文件(全过程)
- 应用程序(Java 程序)发起 IO 请求,要读
a.txt- 操作系统交给文件系统
- 文件系统根据路径,查目录、查 inode / 文件分配表
- 找到文件在硬盘的物理块位置
- 驱动控制硬盘把数据读到内存
- 程序从内存拿到数据
写文件反过来:程序 → 内存 → 文件系统分配磁盘块 → 写入硬盘 → 更新文件元信息。
6. 文件系统 和 Java IO 的关系
- Java 只能操作文件系统提供的抽象文件 / 路径
java.io.File、Path、流读写,全部依赖底层文件系统- 路径分隔符、大小写敏感、权限、文件能否删除、能否覆盖,都由文件系统决定
- Windows 不区分大小写
- Linux 严格区分大小写
三、IO、内存、硬盘、文件系统 整体关系总结
- 硬盘:物理硬件,只存原始二进制
- 文件系统:给硬盘做规则管理,分区、建目录、管文件、记位置
- 内存:程序运行缓冲区,IO 必须经过内存中转
- IO:完成内存与硬盘之间的数据读写交互
层级从上到下:Java 程序 → IO 流 → 操作系统 → 文件系统 → 硬盘驱动 → 物理硬盘
四、博客总结
- IO 即输入输出,是内存与外部设备的数据交换,Java 文件读写本质都是磁盘 IO。
- 存储分为内存(断电丢失、高速)和外存(硬盘 / U 盘,永久存储)。
- 硬盘是物理存储硬件,裸盘无法直接管理文件,依赖文件系统格式化后才能使用。
- 文件系统是操作系统管理磁盘的规则体系,负责分区、空间分配、目录树形结构、文件元信息管理、文件增删改查。
- 常见文件系统有 Windows 的 NTFS、FAT32,Linux 的 Ext4、xFS,移动设备 exFAT。
- 文件系统通过簇 / 块、inode、目录结构管理磁盘空间,所有 Java 文件编程、路径操作、权限控制都依赖底层文件系统。