1.0 初识文件
文件的认识
- 操作系统帮我把硬盘的信息都封装成文件,程序员只需要了解文件的接口即可
- 操作文件即操作硬盘
- 操作系统通过"文件系统"这样的模块来管理硬盘
- NTFS 是windows 上的文件系统,背后有一定的格式来存取与组织硬盘的数据,NXT4 是linux 上的文件系统
- 我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往 往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念, 就类似办公桌上的一份份真实的文件一般。
树型结构组织 和 目录
- 不同的文件系统,管理文件的方式都是类似的
- 通过目录(directory目录/文件夹) - 文件 构成了N叉树的 树形结构
- 同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然 的想法出现了,就是按照层级结构进行组织 —— 也就是我们数据结构中学习过的树形结构。这样,一种 专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder)或者目录(directory)的概 念。
文件路径(Path)
- 如何在文件系统中如何定位我们的一个唯一的文件就成为当前要解决的问题,但这难不倒计算机科学 家,因为从树型结构的角度来看,树中的每个结点都可以被一条从根开始,一直到达的结点的路径所描 述,而这种描述方式就被称为文件的绝对路径(absolute path)
- 从原始目录开始的为"绝对路径"
- …/ ./ 的为 相对路径,需要一个基准目录
2.0 Java 中操作文件
概念
Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不 代表真实存在该文件.
两种文件
文件系统上存储的文件,具体来说又分两大类
文本文件
- 存初的是字符
二进制文件
- 二进制数据
操作区分
- 后续正对文件的操作,二进制和文本的操作是完全不同的
小知识
- word,execl 都是富文本,它不仅记录内容还记录很多信息,比如行间距,字体等等,把他们拖到notepad 则全是映射不了的乱码,但是execl另存为csv 则是单纯的文本文件
- c语言标准库不支持文件操作系统用c删除一个文件非常费劲
理解IO
- 你是站在cpu的视角,cou只能访存
- I input 是把硬盘的东西写到内存
- O output 是吧内存的东西写到硬盘
两种文件的关系
- 字符流的底层还是调用字节流
- 因此字符流的构造可以用字节流的对象