(点击跳转即可哦)
JavaEE
序言
SE 语法(多线程)
数据结构(DS)
数据库(DB)
系统原理(硬件知识、OS知识)
Web开发的学习
- I/O的知识
- 网络原理
- Web开发
1 前端
2 后端
- JVM(原理)
硬件
处理器(CPU)、 存储器(内存)、输入设备(Input Device)、输出设备(Output Device)
CPU 只能和内存做直接的数据交换
Input Device : 现实中的物理信号(光信号、电信号、波信号)-> 数字个数,存储在内存中
Output Device: 数字 -> 物理信号
硬盘——存储
CPU内部 读写速度更快
内存
易失存储 变量、对象 断电后丢失 以进程为单位管理,本质上的编程语言对硬件中内存的抽象
内存(Memory)又称为RAM(Random Access Memory)支持以 O(1) 时间复杂度,根据下标(内存地址)访问的存储
硬盘
脱机存储、网络存储 脱机存储(U 盘、移动硬盘、磁带、光盘)
网络存储(网盘类似的概念)
持久存储 : 1 断电后 一般仍能保存 2 通常可以跨进程读写
从下到上,读写的速度更快
从上到下,存储的容量更大
硬盘的实现
1 磁盘(利用磁性实现的一种存储方式) 硬盘(机械硬盘)
2 固态硬盘(Solid State Disk SSD)
3 闪存 (Flash Memory)
磁盘更合适做连续数据的读写,而不适合做随机数据的读写
硬盘数据的读写 -> 文件的读写问题
OS + 文件系统(FileSystem) 统一管理文件
文件的基本知识:
- 文件被以树形结构(数据结构学过的树,但不是二叉树)进行管理,文件都是树上的节点(node)
- 文件可以大体分为两大类: a. 存储数据的文件——普通文件(俗称的文件)
b. 管理树形结构组织数据的文件——目录/文件夹(directory/dir)
- 这颗文件树只是一个逻辑结构,而不是硬盘上是物理结构
路径
关于文件的路径(Path) : 根据一个规则,从文件树上 唯一确定一个位置,这个位置 一定 对于到某个节点,但是这个节点可以不存在
路径:
1 绝对路径(absolute path abs path): 从一颗树的根节点出发描述的路径
2 相对路径 (relative path): 从 "我们"所在的当前位置(一定是一个目录)出发,描述的路径
什么叫做“我们” 所在 的 位置: 每个进程都有一个当前工作目录,一般一个进程的启动目录,就是当前工作目录
Windows 使用 \ 作为 路径分隔符,Linux(Unix/XOS)使用 / 作为路径分隔符。
好在Java 号称跨平台,所有会帮我们处理这个问题。
我们在 代码中 写 “/” 或者 “\\” 都可以。 由于“/”不用转义,一般使用“/” 为主。
路径表示中的两个特殊符号 一个点(“.”)和 两个点(“…”)
其中,“.”表示在当前位置(目录)不动
“…”表示回到 当前位置的父节点(目录)上
关于文件的路径:
- 路径是树上找到一个节点的位置
- 路径并不表示文件一定存在
- 路径分为 绝对路径和相对路径
- 当前位置:进程的当前工作目录
- 文件路径 “/” 或者 “\\” 表示路径分隔符,java下使用哪个都可以
- “. ” 和 “…” 的含义
树的结点分为:叶子节点 or 非叶子节点
普通文件 -> 叶子节点
目录文件 -> 叶子节点(空目录) or 非叶子节点
数据结构中学过树: 结点的操作更容易,子树的操作更复杂
文件系统中,以结点为单位进行操作(在代码层面)
文件移动操作(文件重命名、文件剪切+粘贴):结点的移动(重命名 or 移动到其他结点下)
文件复制操作(复制+粘贴):新建结点+内容的复制
目录移动操作(目录重命名、目录剪切+粘贴):以该结点为根的一颗子树的移动
目录复制操作:以该节点为根的一颗子树 的复制
删除:默认情况下,只能删除普通文件 or 空目录。只能删除结点,不能删除子树
删除非空目录:对整棵树的删除
树的操作,需要转换为结点的操作: 以目录的复制为例,遍历(深度 or 广度)整颗树,然后对其中的每个结点进行复制
通过Java代码来操作文件(File)
文件数据 = 元数据 + 内容数据
所有类必须放在某个包(package)下,习惯上包的命名习惯 com.djl.io.文件名
文件的IO
createNewFile()
boolean createNewFile()
创建一个新文件。
返回true:创建成功
返回false:创建失败(文件已经存在)
抛出 IOException:发生了 IO异常(最常见的是,文件应该在的目录还不存在)
File file1 = new File("D:/java/javastudy/Java_EE课堂代码/test.txt");
boolean r1 = file1.createNewFile();
System.out.println(r1);
delete() and deleteOnExit()
boolean delete()
void deleteOnExit()
只能操作叶子节点( 普通文件 or 空目录)
区别:
delete : 立即删除
deleteOnExit: 在JVM 退出时才真正删除
删除非空目录
- 先遍历(深度优先—递归),删除这个目录下的所有子孙,让这个目录变成空目录
- 删除该目录
private static void traversal(File file) throws Exception{ //查看这个目录下的所有孩子(不是子孙) File[] files = file.listFiles(); for(File f : files){ if(f.isDirectory()){ System.out.println(f.getCanonicalPath() + "\\"); traversal(f); f.delete(); }else{ System.out.println(f.getCanonicalPath()); f.delete(); } } }
小结:
IO 设备(数据必须经由IO设备处理并加载到内存之后才能被CPU处理)
硬盘设备(存储的常识:读写速度、易失性 等)
文件系统(文件是硬盘数据的抽象)
树形结构、路径、目录 or 普通文件
文件数据 = 管理数据(java.io.File对象) + 内容数据
要是对大家有所帮助的话,请帮我点个赞吧。