当前位置: 首页 > article >正文

操作系统-文件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


http://www.kler.cn/a/381349.html

相关文章:

  • 搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验
  • 算法: 链表题目练习
  • Swift 开发教程系列 - 第5章:集合类型
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(八)SpringBoot 使用Redis
  • 一二三应用开发平台自定义查询设计与实现系列3——通用化重构
  • 《AI产品经理手册》——解锁AI时代的商业密钥
  • Python笔记之线程库threading
  • 【WebApi】C# webapi 后端接收部分属性
  • 如何安装QT(linux/windows)
  • 【矩阵的大小和方向的分解】
  • 20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N
  • LED点阵显示(Proteus 与Keil uVision联合仿真)(点阵字模提取)
  • 伍光和《自然地理学》电子书(含考研真题、课后习题、章节题库、模拟试题)
  • 在一个项目中同时应用OpenAPI、JSON Schema和OAuth2三个规范
  • 如何获取 Django 模型中所有带有选择的字段?
  • 自己生成的页面,保存为图片,并下载word
  • Java+Swing学生信息管理系统
  • JZ8二叉树的下一个结点
  • P10 Pytorch入门实战——Pytorch实现车牌识别
  • WPF 特性------Binding
  • PySpark任务提交
  • Pr 沉浸式视频 - 自动 VR 属性
  • 查找重复的电子邮箱
  • Java 实现接口幂等的九种方法:确保系统稳定性与数据一致性
  • C语言字符数组 java封装
  • sql中判断一个字段是否包含一个数据的方法有哪些?