文件操作IO

目录

基本硬件结构

I/O的概念 和设备

概念

设备

计算机存储结构

易失存储

持久存储

存储结构图

 硬盘中的数据(软件层面)

硬盘数据的读写-> 文件的读写问题

1.文件被以树形结构管理

2.文件的两个大类

1).普通文件

2).目录/文件夹

3.文件树结构

路径

绝对路径

相对路径

怎么样描述路径

绝对路径

相对路径

 路径在代码中的描述

路径中的特殊符号

 关于文件树的节点

 普通文件和目录文件分布

文件系统中都是以节点为单元进行操作的(代码层面)

 通过Java代码操作文件

创建文件

 删除文件

删除普通文件:

删除非空目录的遍历:
 

基本硬件结构
硬件我们可以粗略地分为四大类:

处理器(CPU),存储器(内存),输入设备(Input Device), 输出设备(Output Device)

其中,CPU只能和内存做直接的数据交换

I/O的概念 和设备
输入设备和输出设备我们统称为I/O

概念
输入设备:将现实中的物理信号(光信号,电信号,波信号) ->数字个数,存储在内存中

输出设备:数字->物理信号

设备
输入输出设备有:鼠标,屏幕,扬声器,摄像头,麦克风,键盘,网卡,硬盘等等。

本篇重点说明硬盘这个I/O设备

计算机存储结构
我们可以把计算机的存储结构比作一个金字塔,塔尖的传播速度最快,但是容量较小,

反之则越来越慢,但是塔底的容量最大。

具体的存储结构可以分为这么几部分:

易失存储
易失存储指:在此级别下存储的数据:

1.断电后丢失

2.以进程为单位管理

CPU内部:寄存器,3级缓存(高速缓存器)

在此级别,数据的存储结构是最快的

内存

又被称为RAM,支持以O(1)时间复杂度,根据下标(内存地址)访问的数据

值得注意的是,变量,对象本质上就是编程语言对硬件中内存的抽象

速度不如寄存器和缓存器,但是依旧较快

持久存储
持久存储指:在此级别下存储的数据

1.断电后仍可以保存

2.通常可以跨进程读写

硬盘

硬盘的速度在内存之下,也属于较为快速的存储类型,容量较大

脱机存储,网络存储

此级别下的存储速度是最慢的,但容量也是最大的

脱机存储指:U盘,移动硬盘,磁带,光盘等存储方式

网络存储指:百度网盘,云盘这一系列的

存储结构图
可以用一张图表示计算机的存储结构

 

 

 硬盘中的数据(软件层面)

作为开发工程师,可以把重点放在软件层面上。

我们可以简单认为硬盘有数据存储的就是一个整体的存储结构,而没有数据存储的是可用空间。

硬盘数据的读写-> 文件的读写问题

在计算机中,文件是由OS和文件系统(File System)统一管理的

下面说一说关于文件的基本知识

1.文件被以树形结构管理

这里的树不是二叉树,文件都是树上的结点

每个节点都可以有多个孩子,也就是说每个文件夹中可以有多个类型的文件

 

2.文件的两个大类
1).普通文件
普通文件其实也就是存储数据的文件

像一些文本文件

像.txt文件,.java文件等

也有不是文本的文件(二进制文件)

.class文件,.png文件等

2).目录/文件夹
这种文件用来管理树形结构组织数据,以/结尾就代表这个节点是目录

3.文件树结构
文件树是逻辑结构,不代表硬盘的物理结构,也就是说同一目录下的文件在硬盘中也不一定挨着

路径

路径只是一种描述,不代表这个路径一定是真实存在的。

绝对路径

从树的根节点出发描述的路径

相对路径

从“我们"的位置出发,描述的路径

“我们”指的就是进程的当前工作目录,一般一个进程的启动目录就是当前的工作目录。

怎么样描述路径

绝对路径

首先,在绝对路径下,一定是以某个盘为根节点开头的,比如D:     \    课程  \   火箭班   \  板书.png

相对路径

相对路径不是由根开始的

当我们处在课程处时,火箭班\板书.png就是相对路径。

 路径在代码中的描述

我们用一个String类型描述路径

这个符号 “ \ ” 叫做路径分隔符,在Java中我们想用的话需要再多打一个\ ,因为一个\表示转义

或者 我们可以用 “ / ” 来替代,就不需要分隔符了。

路径中的特殊符号
一个 “  . ” 表示在当前位置(目录)不同

        “  ..  ”表示回到当前位置的父节点上  

这两个符号多用于相对路径

关于文件树的节点
 普通文件和目录文件分布
普通文件一定是叶子节点

目录文件均可,作为空目录时也可以作为叶子节点

文件系统中都是以节点为单元进行操作的(代码层面)
这代表着当我移动或更改一个目录时,其实是对其中的每一个节点进行操作的。(如果目录中还有目录就进行深度遍历或广度遍历)。

 通过Java代码操作文件

文件数据包括元数据和内容数据,接下来我们只关注元文件本身。

对于文件树的操作,可以分为,判断是否是目录,创建,删除,重命名。

首先 使用File file = new File(“路径字符串”);来描述一个路径。

创建文件

creatNewFile();

若创建的文件已存在,则创建失败,返回false

抛出异常很有可能是路径问题

 删除文件

delete();

只能删除空目录或者普通文件,如果想删除非空目录的话需要进行深度或广度遍历删掉所有子节点才可以删除当前目录。

删除普通文件:

file.delete();

 删除非空目录的遍历:

public class Demo2 {
    public static void main(String[] args) throws Exception {
        File file = new File("D:\\课程\\2022-06-27-2022火箭班-IO\\some-dir");
        traversal(file);
        file.delete();
//        boolean r = file.delete();
//        System.out.println(r);
    }
 
    private static void traversal(File dir) throws Exception {
        File[] files = dir.listFiles(); // 查看这个目录下的所有孩子(不是子孙)
        for (File file : files) {
            if (file.isDirectory()) {   // 如果这个孩子也是目录,继续深度优先进行遍历
                System.out.println(file.getCanonicalPath() + "\\");
                traversal(file);
                // 当深度优先的遍历完成时,则可以认为该目录一定是空目录了
                file.delete();
            } else {
                System.out.println(file.getCanonicalPath());    // 得到这个文件的一个标准(去除一切无意义的 . 和 ..)
                file.delete();
            }
        }
    }
}

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值