操作系统-文件IO
一、文件
对计算机来说,文件是一个广义的概念
硬盘上的文件,硬盘上的目录(文件夹)
很多硬件设备也被操作系统抽象成文件
对机械硬盘来说更擅长顺序读写,不擅长随机读写
有一个很大的文件,要把这个文件整体复制一下(顺序读写)
某个目录中有很多小文件,文件很小数目很多,把目录拷贝一下(随机读写)
小文件过多,在硬盘上的存储位置并不连续,而是离散的,可能出现在各个位置
代码不涉及硬盘的结构细节,操作系统已经封装好了
文件系统按照“树形结构“来组织文件,树是N叉树,每一个普通文件就是叶子节点,对一个目录文件来说,里面又可以有很多子节点
二、路径
操作系统使用路径这样的概念来描述一个文件的具体位置
路径:
1、绝对路径,指从根节点出发一层一层到达最终目标文件
2、相对路径:指定一个当前目录,从当前目录出发,找到目标文件
实际开发中相对路径使用较多,优先使用正斜杠 /
三、文件分类
1、文本文件
此处的文本文件,是按照 ”文本”/字符串 方式理解文件内容,文本文件里的二进制内容,都是表示的字符串,进一步认为二进制文件的内容都是合法字符
2、二进制文件
二进制文件无以上限制,内容储存什么元素都可以
合法字符:存储的数据在指定码表上可查,就是合法字符
使用记事本打开,若是正常内容,就是文本文件,若是乱码,就是二进制文件
四、文件操作
1、针对文件系统的操作
包括不限于创建文件,删除文件,重命名文件,列出目录内容.....
2、针对文件内容操作
读文件/写文件
java中针对文件系统的操作,使用 File 类进行,该类所在的包叫做java.io
File (String pathname) 构造一个File 对象,要指定路径,可以是绝对路径也可以是相对路径
String getParent() 返回 File 对象的父目录文件路径
String getName() 返回 FIle 对象的纯文件名称
String getPath() 返回 File 对象的文件路径
String getAbsolutePath() 返回 File 对象的绝对路径
String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
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对象表示
boolean mkdir() 创建 File 对象代表的目录
boolean mkdirs() 创建 File对象代表的目录,如果必要,会创建中间目录
boolean renameTo(File dest) 进行文件改名,也可以视为我们平时的剪切、粘贴操作
boolean canRead() 判断用户是否对文件有可读权限
boolean canWrite() 判断用户是否对文件有可写权限
五、数据流
java标准库对于流进行一系列封装,提供了一组类来负责进行这些工作
1、字节流
以字节为单位读写,一次最少读取一个字节
代表类:inputStream 输入
outputStream 输出
2、字符流
以字符为单位进行读写,若是utf8表示汉字,3个字节就是一个汉字,每次读写都得以3个字节为单位
代表类:Reader 输入
Writer 输出
文件流读写文件内容在各种编程语言中套路固定
打开文件,关闭文件,读文件, 写文件
使用 inputStream 创建对象的过程就是打开文件的过程
使用 try with resource 包裹,则出 try 的范围会自动关闭
但是 try 仅能包裹实现了 Closeable 类的接口
使用read的时候,住往是定义一个内容为空的数组(非null),把空的数组交给read,read内部对数组内容进行填充
read第二,三个版本返回的 int 表示实际读取的字节个数,默认状况下,read会尝试把数组填满,但是文件的剩余长度可能不足以填满了,返回值可以告诉咱们实际填写了多少字节
outputStream,默认情况下会把原有内容全清空再重新填写
清空操作非 write 操作引起的,而是打开操作引起的
也可以使用追加写的方式,不清空文件内容,把新的内容写到文件未尾(append追加用true)
reader,writer 和 inputStream ,outputStream 操作相似
scanner(system in)本质是inputStream