文件操作1(I/O)

本文介绍了计算机中文件的广义概念,包括普通文件、目录和硬件设备,并探讨了机械硬盘与固态硬盘的区别。在Java中,文件操作主要涉及文件系统和内容操作,File类是核心,提供了如创建、删除、重命名等方法。此外,还讲解了文件路径、类型判断及目录结构。
摘要由CSDN通过智能技术生成

一、认识文件

平时说的文件一般都是指存储在硬盘上的普通文件 形如txt,jpg,mp4,rar等这些文件都可以认为是普通文件.
它们都是在硬盘上存储的
在这里插入图片描述

在计算机中,文件可能是一个广义的概念.就不只是包含普通文件,还可以包含目录(把目录称为目录文件)
在这里插入图片描述

在操作系统中,还会使用文件来描述一些其它的硬件设备或者软件资源。
其实站在操作系统的角度上来看,所谓的文件,其实是一个非常广义的概念。 不仅仅指的是我们日常生活中所说的这些普通文件,也包含目录,还包含一些软硬件资源设备

后面讲网络编程的时候,会讲到一个很重要的设备“网卡”。
网卡,是一个硬件设备。但是在操作系统中就把 网卡 这样的硬件设备也给抽象成了一个文件。
这样的操作,会给我们进行网络编程带来很大便利。
我们要想通过网卡来收数据,直接按照 读文件代码 去写 就可以了。
想通过网卡来发数据,那就按照 写文件代码 去写就行了
这样做带来的好处:简化开发。
通过这种文件的操作,来完成操作网卡的过程。

除此之外,还有显示器,键盘,这都是硬件设备吧。
操作系统也是把这些设备视为文件。
想从键盘读取数据,其实也是通过类似读文件的方式来进行的。
想往显示器上写一个数据,也是通过类似写文件的方式来进行的。

因此,操作系统谈到的文件,其实是一个更加广泛的概念。它会涉及到各个方面的情况。

当前我们需要讨论的文件,主要还是针对普通文件来讨论的。
后面去学习一些其他的硬件设备对应的文件,其实也是通过类似的代码来实现操作。
因此,我们虽然讨论的是针对普通文件为例来去演示,但实际上这里的一些代码,和后需用到的一些代码,尤其是网络编程的代码,是非常具有共性的。

1.1、普通文件 与 机械硬盘

普通文件是保存在硬盘上的
在这里插入图片描述

机械硬盘一旦上电,里面的盘片就会高速运转
例如我这个硬盘是7200转/m,磁头就再盘片上找到对应的数据,受限于机械硬盘的硬件结构,盘片转速越高,读写速度就越快,但是因为工艺的限制,盘片的转速也不可能无限高,机械硬盘的读写速度,已经有10年停滞未前.机械硬盘都是往大容量的方向发展
这里的这个读写速度就比内存读写慢很多(3-4)数量级

后面为了解决这个问题,就有了固态硬盘(SSD)。 固态硬盘的硬件结构 和 机械硬盘 截然不同。 固态硬盘就是一个大号的U盘
在这里插入图片描述

U盘:里面可以存储数据,但是又不需要盘片这些东西。主要是 flash 芯片(闪存),通过这个东西来进行存储数据,而且能获取到更高速率的读写。
所以,固态硬盘的读写速度要比机械硬盘高很多。【高好几倍】
现在最好的固态硬盘,读写速度已经接近十几年前的内存水平了。

二、文件的分类

站在程序员的角度,主要把文件分成两类:
1、文本文件:里面存储的是字符
2、二进制文件:里面存储的是字节
针对这两种文件,在编程的时候会存在差异

有的人可能会有疑问:字符不也是字节构成的吗?
是的,确实如此。文本文件本质上也是存字节的。
但是文本文件中,相邻的字节在一起正好能构成一个个的字符。

所以,我们所说的存储单位是 字符,其实意思就是:相邻的这些字节之间 是存在关联关系的,不是毫不相干的!

而二进制文件里面存储的字节,相互之间是完全没有关系。

2.1、如何进行文件种类的判断?

如何判断一个文件是二进制文件还是文本文件
就是 把一个文件直接用记事本打开,如果是乱码就是 二进制文件,如果不是乱码就是文本文件

在这里插入图片描述

2.2、文件目录

计算机里,保存管理文件,是通过 操作系统 中的“文件系统” 这样的模块来负责的。
在文件系统中,一般是通过“树形”结构来组织硬盘上的目录和文件的。【N叉树】

在这里插入图片描述
也就是说普通文件,一定是树的叶子结点。
目录文件,就可以看作是一个子树,也就是非叶子节点。

2.2.3、如何去描述一个具体的文件(路径)

在操作系统中,就通过“路径” 这样的概念,来描述一个具体 文件/目录 的位置。

2.2.3.1、绝对路径

以盘符开头的。【以 C、D、E、F等等,盘名开头的】
在这里插入图片描述
可以根据这样的路径去找到相应的文件

2.2.3.1、相对路径

相对路径∶以.(点)或者…(点点)开头的,其中.(点)表示当前路径, …(点点)表示当前路径的父目录(上级路径)
谈到相对路径,必须要现有一个基准目录 相对路径就是从基准目录出发,按照一个啥样的路径找到的对应文件
在这里插入图片描述
注意!即使是找到同一个文件,如果基准路径不同,此时的相对路径也就不同
在这里插入图片描述
理解相对路径
这个列子来源于细节狂魔:https://blog.csdn.net/DarkAndGrey/article/details/124010533?spm=1001.2014.3001.5502
在这里插入图片描述

三、java中的文件操作

Java中操作文件,主要是包含两类操作
1、文件系统相关的操作
2、文件内容相关的操作

虽然 Java中的文件操作 和 C 语言中的操作,差别还是蛮大的。
但是基本的思路是一样的。

3.1、文件系统相关的操作

文件系统相关的操作:指的是通过“文件资源管理器” 能够完成的一些功能

在这里插入图片描述
它具有的功能
1、列出目录中有哪些文件
2、创建文件(直接右键点击菜单创建,就可以创建了)
3、创建 目录/文件夹
4、删除文件
5、重命名文件

这些都是文件资源管理器所能够完成的功能。
简单来说 文件资源管理器 能做什么,我们的文件系统相关操作的代码就能做什么。

在Java中提供了一个 File 类,通过这个类来完成上述操作。
首先,这个File类就描述了一个文件/目录。
基于这个对象就可以实现上面的功能。

属性
在这里插入图片描述

构造方法
在这里插入图片描述

File 的构造方法,能够传入一个路径,来指定一个文件。
这个路径可以是绝对路径,也可以是相对路径。

file的一些常用的方法
在这里插入图片描述

通过绝对路径和相对路径来定位一个文件
在这里插入图片描述
此时通过相对路径来定位一个文件,通过代码是看不出来基准路径的,这和程序运行的方式是有区别的
三种运行程序的方式:
1、通过命令行来运行
这个看一下:细节狂魔:https://blog.csdn.net/DarkAndGrey/article/details/124010533?spm=1001.2014.3001.5502

2、通过IDEA来运行程序,此时基准目录就是当前Java 项目所在目录
在这里插入图片描述
3、后面,我们还会学到,把一个java代码,打成war包,放到Tomcat 上运行。
这种情况下,基准路径就是Tomcat 的 bin目录上【这里了解知道有这个东西】
需要注意的是一旦路径指定错了,很容易出现找不到文件的情况!! !

3.2、一些方法的使用

getParent、getName、getPath、getAbsolutePath、getCanonicalPath

File file = new File("d:/file.txt");
        //获取到文件父目录
        System.out.println(file.getParent());
        //获取文件名称
        System.out.println(file.getName());
        //获取文件路径
        System.out.println(file.getPath());
        //获取文件的绝对路径
        System.out.println(file.getAbsoluteFile());
        //获取文件修饰过的绝对路径
        System.out.println(file.getCanonicalFile());
        System.out.println("=====================");
        File file1 = new File("./file.txt");
        //获取到文件父目录
        System.out.println(file1.getParent());
        //获取文件名称
        System.out.println(file1.getName());
        //获取文件路径
        System.out.println(file1.getPath());
        //获取文件的绝对路径
        System.out.println(file1.getAbsoluteFile());
        //获取文件修饰过的绝对路径
        System.out.println(file1.getCanonicalFile());
    }

在这里插入图片描述

此时运行结果输出的是“\”,我们在描述文件的时候使用的是“/”

在这里插入图片描述
exists、isDirectory、isFile

public static void main(String[] args) {
        File file = new File("d:/test.txt");
        //判断File 对象描述的文件是否真实存在
        System.out.println(file.exists());
        //判断File 对象代表的文件是否是一个目录
        System.out.println(file.isDirectory());
        //判断File 对象代表的文件是否是一个普通文件
        System.out.println(file.isFile());
    }
}

在这里插入图片描述

public static void main(String[] args) {
        File file = new File("./test.txt");
        //判断File 对象描述的文件是否真实存在
        System.out.println(file.exists());
        //判断File 对象代表的文件是否是一个目录
        System.out.println(file.isDirectory());
        //判断File 对象代表的文件是否是一个普通文件
        System.out.println(file.isFile());
    }

在这里插入图片描述
createNewFile

public static void main(String[] args) throws IOException {
        File file = new File("./test..txt");
        //判断文件是否存在
        System.out.println(file.exists());
        //创建一个文件
        file.createNewFile();
        //判断文件是否存在
        System.out.println(file.exists());
}

在这里插入图片描述
delete

public static void main(String[] args) throws IOException {
        File file = new File("./test..txt");
        //判断文件是否存在
        System.out.println(file.exists());
        //创建一个文件
        file.createNewFile();
        //判断文件是否存在
        System.out.println(file.exists());
        //判断文件是否被删除
        Boolean b = file.delete();
        System.out.println(b);
    }

在这里插入图片描述
mkdir、mkdirs

在这里插入图片描述
list 、listFiles
在这里插入图片描述
这两个函数就是返回值不同
只不过listFiles是相对路径的方式进行打印。list则是一种简化路径的输出方式。
在这里插入图片描述
renameTo

public static void main(String[] args) {
        File file = new File("./文档");
        File file1 = new File("./哈哈");
        file.renameTo(file1);
    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Später321

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值