JavaSE IO流 Vol.1 基础 入门
1. 前言
· IO 流 专题 传送门:
· JavaSE IO流 Vol.2 节点流 - 输入流 入门
· JavaSE IO流 Vol.3 节点流 - 输出流 入门
· 本文章是用于 个人学习过程中 整理知识点的帖子,主题为:JavaSE IO流 Vol.1 基础 入门
· 由于 第五节 包含知识点过于密集,所以部分知识点将作为新章节进行拆分。
· 本文章出现的 遗漏、错误 欢迎点开这篇文章的各位指出。
· 本文章的知识大纲根据 韩顺平老师 JavaSE 教学视频 进行编写。
【感谢韩顺平老师带来的优质教学和对教育作出的贡献】
2. 相关概念
● 文件 ●
· 文件,指的是 保存数据的地方 。
● 流 ●
· 流,指的是 数据 在 数据源和程序之间 经过的 路径 。
● 文件流 ●
· 文件在程序中是以 流的形式 来操作的 。
● 输入流 & 输出流 ●
· 输入流:数据从 数据源到程序 的路径 。
· 输出流:数据从 程序到数据源 的路径 。
3. 文件
● 文件结构体系 ●
· 组成体系
· 类结构 [ 构造器 ]
● 文件的创建 ●
指令 | 解释 |
---|---|
new File ( String pathname ) | 在指定路径中创建 File 对象 |
new File ( File parent , String child ) | 在父目录中 创建 File 对象 |
new File ( String paren , String child ) | 在父目录中 的 子目录中 创建 File 对象 |
· 核心创建指令:file.createNewFile ()
● 文件的常用方法 ●
信息的相关操作 | 解释 |
---|---|
file.getName ( ) | 获取文件 名称 |
file.getAbsolutePath ( ) | 获取文件 绝对路径 |
file.getParent ( ) | 获取文件 父目录 |
file.length ( ) | 获取文件 大小 ( 字节 ) |
file.exists ( ) | 判断文件 是否存在 |
file.isFile ( ) | 判断文件 是否为文件 |
file.isDirectory ( ) | 判断文件 是否为目录 |
目录的相关操作 | 解释 |
---|---|
file.delete ( ) | 删除空目录或空文件 |
file.mkdir ( ) | 创建一级目录 |
file.mkdirs ( ) | 创建多级目录 |
4. IO流
● 基本介绍 ●
· IO流 是 Input / Output 的缩写,其使用非常广泛,用于处理数据传输,例如:读写文件、网络通讯 等。
● 相关原理 ●
· 在 Java 程序中,对于数据的 输入/输出 操作均以 “流 [ Stream ] ” 的方式进行 。
· Java.io 包 提供了各种 “流” 类和接口,用以获取不同种类的数据,并通过方法输入或输出数据 。
· Java.io 包 中的类均为 抽象类 。为的是规范所有子类要实现其功能,就必须继承 。
● 流的分类 ●
· 按 操作数据单位 分为:字节流、字符流 。
· 按 数据流的流向 分为:输入流、输出流 。
· 按 流的角色 分为:节点流、处理流/包装流 。
抽象基类 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
5. 节点流 和 处理流
● 节点流
· 传送门:JavaSE IO流 Vol.2 节点流 - 输入流 入门
· 传送门:JavaSE IO流 Vol.3 节点流 - 输出流 入门
· 节点流可以从一个特定的数据源进行读写数据操作 。 例如:FileReader、FileWriter
● 处理流
· 传送门:JavaSE IO流 Vol.4 处理流 入门
· 处理流,又称作包装流 。 处理流 就是 节点流 的 包装类。
· 它是连接在已存在流之上的,为程序提供更为高效的读写数据功能。例如:BufferedReader、BufferedWriter
· 每一个处理流都可以存放不同类型的节点流,进行更为便捷的处理 。
● 装饰器模式
· 装饰器模式是一种设计模式,通过包装传入的类进行更加多元化的数据操作 。
· 处理流的实现就是装饰器模式的一种典型案例 。
· 下面就根据 模拟 字符缓冲输入流 BufferedReader 来讲解装饰器模式:
● 标准流
· System 类提供了一套标准流供用户使用:最常用的莫属 System.in 和 System.out 。
标准流 | 类型 | 默认设备 |
---|---|---|
System.in | InputStream | 键盘 |
Systeam.out | PrintStream | 显示器 |
● 标准输入 ●
· System.in 是指 System 类的 in 属性,其属性结构为:public final static InputStream in = null
· System.in 的编译类型为:InputStream
· System.in 的运行类型为:BufferedInputStream
● 标准输出 ●
· System.out 是指 System 类的 out 属性,其属性结构为:public final static PrintStream out = null
· System.out 的编译类型为:PrintStream
· System.out 的运行类型为:PrintStream
5. Properties 类
· 传送门:JavaSE 集合 Vol.2 Map 源码入门 (含截图分析)
● 知识点回顾 ●
· Properties 实现类 继承自 HashTable 实现类,是 HashTable 的子类,同时它也实现了 Map 接口。
· Properties 存放数据的方式也是 键值对 形式。它的使用特点和 HashTable 一致。
· 另外 Properties 类 与父类 HashTable 一样,是线程安全的 。
● 使用场景 ●
· Properties 最广泛的使用是:从 xxx.properties 文件中,这类文件的数据都是以 键值对的形式 进行存储的,例如:数据库数据。
· 将数据加载到 Properties 类对象,可以对数据进行高效读取和修改 。
· 对数据进行读取和修改的过程,就是使用了 节点流 。
· Properties 类 其实就是 集合 + IO流 的综合实现 。
● 基本使用 ●
· 下面就根据 使用 Properties 类 执行 数据读取、数据修改、创建文件 进行演示:
● 数据读取 ●
● 数据修改 ●
● 创建文件 ●