编程体系结构(04):JavaIO流文件管理
本文源码:GitHub·点这里 || GitEE·点这里
一、IO流分类
1、分类角度
流的方向
- 输入流:从数据源中读取数据到应用中的流;
- 输出流:从应用中将数据写入到目的地的流;
流数据类型
- 字节流:以字节形式来读写的流,标识是名称以Stream结尾;
- 字符流:以字符形式来读写的流,标识是名称以Writer、Reader结尾;
- 管道流:以数据块为单位来处理,缓冲区就是用于读写的数据块;
流的角色
- 节点流:可以从一个节点或者向一个节点读/写数据的流,也被称为低级流;
- 处理流:对存在的流进行连接或者封装、封装后的流来进行读/写、也被称为高级流。
2、API体系

5个核心类ObjectOutputStream:File、OutputStream、InputStream、Writer、Reader;
1关键接口:Serializable;
二、API细节分类
1、字节输入流

InputStream:字节输入流是所有字节输入流的父类、为所有字节输入流提供一个标准、和基本的与读取字节有关的方法及简单的实现。
FileInputStream:文件字节输入流以字节的形式将文件中数据读取到应用中;
BufferedInputStream:缓冲字节输入流,提供缓冲功能,提高效率;
ByteArrayInputStream:字节数组输入流用于读取其内置缓存字节数组中的字节;
PipedInputStream:管道字节输入流必须与PipedOutputStream结合使用,用于线程之间的通信;
FilterInputStream:过滤器字节输入流,重写InputStream方法,为字节输入处理流提供扩展;
DataInputStream:数据字节输入流,一般与DataOutputStream结合使用;
ObjectInputStream:对象字节输入流,与ObjectOutputStream结合使用;
2、字节输出流

OutputStream:字节输出流,InputStream作用一样,为所有字节输出流提供一个标准、定义了一些基本输出字节的方法与简单实现;
FileOutputStream:文件字节输出流,将字节写入指定目标的文件源中;
BufferedOutputStream:缓冲字节输出流,提供缓冲功能、提高效率;
ByteArrayOutputStream:字节数组输出流,将字节写入到其本身所带的一个内置缓存字节数组中;
PipedoutputStream:管道字节输出流,必须与PipedInputStream结合使用、用于线程之间的通信;
FilterOutputStream:过滤字节输出流,为字节输出处理流提供扩展;
DataOutputStream: 数据字节输出流,一般与DataInputStream结合使用;
ObjectOutputStream:对象字节输出流,通常与ObjectInputStream结合使用;
PrintStream:字节打印流,字节输出流进行装饰、提供打印各种数据类型的功能;
3、字符输入流

Reader:字符输入流,为所有字符输入流提供一个标准、只有基本的读取方法的定义和简单的实现;
InputStreamReader:字节转换流,将字节流转换成字符流,并且可以指定字节转成字符时使用的编码;
BufferedReader:缓冲字符输入流,为字符输入流提供缓冲功能、提高效率;
CharArrayReader:字符数组输入流,将其内置字符缓存数组中的数据读取到应用中;
PipedReader:管道字符输入流,与PipedWriter结合使用、用于线程之间的通信;
FilterReader:过滤字符输入流,为字符输入流提供扩展;
FileReader:文件字符输入流,字符的形式读取文件中的内容;
4、字符输出流

Writer:字符输出流,所有字符输出流提供一个标准,基本写入的方法和简单的实现;
OutputStreamWriter:字节输出转换流,用于将字节输出流转化成字符输出流。可以指定编码转化;
BufferedWriter:缓存字符输出流,提供缓冲功能、提高效率;
CharArrayWriter:字符输出流,用于将字符写入其内置缓存字符数组中;
PipedWriter:管道字符输出流,与PipedReader结合使用,用于线程之间的通信;
FileWriter:文件字符输出流,用于将字符写入到指定文件中;
PrintWriter:字符打印流,将各种数据以字符的形式打印;
三、File文件类
1、构造方法
File(String pathname):指定文件或者文件夹的路径创建一个File文件;
File(File parent,String child):根据parent抽象路径名和child路径名字符创建新的File实例;
2、路径问题
绝对路径:该文件在硬盘上的完整路径。绝对路径一般都是以盘符开头的。
相对路径: 相对路径就是资源文件相对于当前程序所在的路径。
. 当前路径
.. 上一级路径
3、文件的创建
createNewFile():在指定位置创建一个空文件,成功返回true,已存在就不创建然后返回false;
mkdir():在指定位置创建目录,这只会创建最后一级目录,上级目录不存在就抛异常;
mkdirs():在指定位置创建目录,这会创建路径中所有不存在的目录;
4、删除文件
delete() 删除文件或者一个空的文件夹,如果文件夹且不为空,则不能删除,成功返回true,失败返回false;
5、判断方法
exists():文件或文件夹是否存在;
isFile():是否是一个文件,如果不存在,则始终为false;
isDirectory():是否是一个目录,如果不存在,则始终是false;
6、获取文件信息
getName():获取文件或文件夹名称,不包含上级路径;
getPath():返回绝对路径,可以是相对路径,但是目录要指定
四、编码解码


字节流读取的是文件中的二进制数据,不会自动转为可以看懂的字符;字符流:把读到的数据进行对应的编码与解码。
五、源代码地址
GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile
推荐阅读:编程体系整理
| 序号 | 项目名称 | GitHub地址 | GitEE地址 | 推荐指数 |
|---|---|---|---|---|
| 01 | Java描述设计模式,算法,数据结构 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 02 | Java基础、并发、面向对象、Web开发 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
| 03 | SpringCloud微服务基础组件案例详解 | GitHub·点这里 | GitEE·点这里 | ☆☆☆ |
| 04 | SpringCloud微服务架构实战综合案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基础应用入门到进阶 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合开发常用中间件 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 07 | 数据管理、分布式、架构设计基础案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 08 | 大数据系列、存储、组件、计算等框架 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
编程体系结构(04):JavaIO流文件管理的更多相关文章
- Java学习日记之 Java-IO流
Java中的IO流在处理上分为字节流和字符流.字节流和字符流的区别 : 1.字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8 ...
- SSAS系列——【05】多维数据(编程体系结构)
原文:SSAS系列--[05]多维数据(编程体系结构) 1.什么是AMO? 翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在 ...
- javaIO流实现读写txt文件
javaIO流实现文件读写 文件写入: InputStreamReader BufferedReader 文件读取: FileOutputStream package javatest.basic22 ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...
- JavaIO流中的拷贝
JavaIO流中对数据的操作尤为重要,掌握了基本的拷贝操作,才能将各种数据源的操作联系起来. 先来看看对文件夹的拷贝吧: /** * 利用递归实现文件夹的拷贝操作 * 分析:判断 * 是文件:调用拷贝 ...
- JavaIO 流(1)IO流介绍
IO流定义: 流的本质是一组单向有序,分起始和终止的数据传输过程.需要导入import java.io.* IO流分类: 按数据类型分为:字节流和字符流 字节流: 按字节进行读取(可以处理任意类型数据 ...
- Java基础 Java-IO流 深入浅出
建议阅读 重要性由高到低 Java基础-3 吃透Java IO:字节流.字符流.缓冲流 廖雪峰Java IO Java-IO流 JAVA设计模式初探之装饰者模式 为什么我觉得 Java 的 IO 很复 ...
- 完美解决JavaIO流报错 java.io.FileNotFoundException: F:\ (系统找不到指定的路径。)
完美解决JavaIO流报错 java.io.FileNotFoundException: F:\ (系统找不到指定的路径.) 错误原因 读出文件的路径需要有被拷贝的文件名,否则无法解析地址 源代码(用 ...
- javaIO -- 流的体系设计思路、基础分类
一.流 1. 流的含义 在程序设计中,流是对于数据流动传输的一种抽象描述任何有能力产出数据的数据源,或者有能力接受数据的接收端对象都是一个流. 2. 流的源和目的 数据可能从本地文件读取,或者写入, ...
随机推荐
- codeforce Round #665(div 2)A B C
A. Distance and Axis 题意:在一个0x轴上,给了a在0x轴上的坐标,要你放一个b点使得abs(0B - AB)的值等于 k,但是有的时候如果不移动A点就不能实现这个条件,所以要你求 ...
- Java面试题(Kafka篇+zookeeper 篇)
Kafka 152.kafka 可以脱离 zookeeper 单独使用吗?为什么? kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafk ...
- 【NodeJS】-init
创建NodeJS项目. #新建一个空文件夹 mkdir ReactGame #生成pakeage.json文件(这个文件主要是用来记录这个项目的详细信息的,它会将我们在项目开发中所要用到的包,以及项目 ...
- oeasy教您玩转linux010102查看发行版
查看发行版distro 回忆上次内容 从帮助咱们可以知道 name -a 可以得到全部信息 uname -a 从中,咱们知道有ubuntu,他好像是一种发行版. 那么,什么是发行版呢? 什么是发行版?
- unity 4种实现动态障碍方法
此文将介绍4种实现动态障碍的方法,2种基于navmesh,2种基于astar算法. 1.基于navmesh. 1.制作场景障碍: a.有几个独立的障碍物,就定义几个user area,即,一个场景仅仅 ...
- Unity3D如何有效地组织代码?
本文整理自知乎,原文链接:http://www.zhihu.com/question/21070379 问题: Unity3D可以说是高度的Component-Based Architecture,同 ...
- Spine学习三 - 同时播放两个动画
这个效果和 Unity的动画分层有点儿像,比如 一个人有一个跑的动画,还有一个站在原地挥手的动画,Unity可以通过动画分层,让人物只需要使用这两个动画实现边跑边挥手的动画效果. 首先介绍一下Spin ...
- 支付-微信h5
背景 h5支付分两种 1.浏览器 2.app 浏览器里的h5,最终也会跳转到app. 而app里的h5,本质是公众号.在微信里叫公众号,支付宝叫服务窗. 这里主要讲微信h5. 核心原理 最终目标是下单 ...
- 跟着尚硅谷系统学习Docker-【day05】
day05-20200717 p21.docker容器数据卷容器 就是活动硬盘上面挂载硬盘进行数据的传递. [docker run -it --name dc01 fyr/centos ...
- stackoverflow的ret2syscall利用
ret2syscall 系统调用 ret2syscall,即控制程序执行系统调用,获取shell.Linux将内核功能接口制作为系统调用(system call),可在程序中直接调用.程序中存在int ...