认识文件
先来认识狭义上的文件(存储在硬盘(磁盘)上).针对硬盘这种持久化的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般.
注意:硬盘 != 磁盘
磁盘属于外存的一种.
而硬盘分为机械硬盘和固态硬盘.
机械硬盘:磁性介质存储二进制数据.
固态硬盘:内部为集成电路,和磁性介质无关. -> 优势:读写速度快了很多.
如上图就是磁盘,类似一个碟片机的东西.上面那个尖叫做磁头(很细的针头,能感知磁性的变化,磁头悬停在盘片不同位置可以进行读取),圆的是盘片,可以高速旋转以让磁头读取.
文件除了有数据内容之外,还有一部分信息,例如文件名,文件类型,文件大小等并不作为文件的数据而存在,我们把这部分信息可以视为文件的元信息.
树形结构组织和目录
同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢?就是按照层级结构进行组织-也就是我们数据结构中学习过的树形结构.这样,一种专门用来存放管理信息的特殊文件产生了,也就是我们平时所谓文件夹或者目录的概念.
文件路径
如何在文件系统中定位我们的一个唯一的文件就成为当前要解决的问题,这难不倒计算机科学家,因为从树形结构的角度来看,树中每个结点都可以被一条从根开始,一直到达所有结点的路径所描述,而这种描述方式就被称为文件的绝对路径.(可以想象成哈希表结构,每一个目录中,可根据名字非常快速地找到子元素)
除了可以从根开始进行路径的描述,我们可以从任意结点出发,进行路径的描述,而这种描述方式被称为相对路径,相当于当前所在结点的一条路径.
eg.在C:\Users\1\test.txt这条路径中找test.txt.
如果当前目录为C:\Users\1
相对路径: ./test.txt (.表示当前目录)
当前目录为C:\Users
相对路径: ./1/test.txt
当前是C:\Users\1\AppData
相对路径: ../test.txt (..表示上层目录)
在实际开发中用的更多是相对路径.
其它知识
即使是普通文件,根据其保存数据的不同,也经常被分为不同类型,我们一般简单的划分为文本文件和二进制文件,分别指代保存被字符集编码的文本和按照标准格式保存的非被字符集编码过的文件.
给定一个文件如何判断是文本二进制 ->用记事本判定
使用记事本打开,如果是正常内容 -> 文本文件, 乱码 -> 二进制文件
.class,图片,音频,视频,可执行程序,动态库...属于二进制文件
文本文档,.c,.java,.cpp为文本文件
还有一种富文本文件,譬如word,docx都为富文本文件
Windows操作系统上,会按照文件名中的后缀来确定文件类型以及该文件的默认打开程序.但这个习俗并不是通用的,在OSX,Unix,Linux等操作系统上,就没有这样的习惯,一般不对文件类型做如此精确地分类.
文件由于被操作系统进行了管理,所以根据不同的用户,会赋予用户不同的对待该文件地权限,一般地可以认为有可读,可写,可执行权限.
Windows操作系统上,还有一类文件比较特殊,就是平时我们看到的快捷方式,这种文件只是对真实文件的一种引用而已.其它操作系统上也有类似的概念,例如,软链接等.
最后,很多操作系统为了实现接口的统一性,将所有I/O设备都抽象成文件的概念,使用这一理念最为知名的就是Unix,Linux操作系统--万物皆文件.