编程体系结构(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. 流的源和目的 数据可能从本地文件读取,或者写入, ...
随机推荐
- 区块链入门到实战(17)之以太坊(Ethereum) – 是什么
以太坊的作用:构建基于区块链的分布式应用. 以太坊是什么:可编程的虚拟币. 以太坊(Ethereum)是一个可编程的虚拟币,它是一个基于公共区块链的分布式计算平台,可用于构建基于区块链的分布式应用. ...
- SpringCloud系列之Nacos应用篇
前言 原先项目是以SpringConfig作为项目配置中心组件,Eureka作为服务注册发现组件,基本上就是SpringCloud全家桶,Eureka已经停更,所以前期调研可替换方案,主流替换方案有C ...
- android开发之使edittext输入弹出数字软键盘。亲测可用。手机号登陆注册常用。
<EditText android:id="@+id/edit_digit_input" android:layout_width="wrap_content&qu ...
- 微信小程序|小游戏
[官]小游戏开发 https://developers.weixin.qq.com/minigame/dev/index.html 官网 https://mp.weixin.qq.com 做了4个微信 ...
- 牛顿迭代法解非线性方程组(MATLAB版)
牛顿迭代法,又名切线法,这里不详细介绍,简单说明每一次牛顿迭代的运算:首先将各个方程式在一个根的估计值处线性化(泰勒展开式忽略高阶余项),然后求解线性化后的方程组,最后再更新根的估计值.下面以求解最简 ...
- 1.异常页面: /File/ApplyFileForm.aspx 2.异常信息: 基类包括字段“PageOfficeCtrl1”,但其类型(PageOffice.PageOfficeCtrl)与控件(PageOffice.PageOfficeCtrl)的类型不兼容。
出现页面报错的解决如下: 1. 在 .aspx 页面报错的字段 ID 名称更改: 2. 在没有重复 ID控件,先实行步骤1, 生成项目是ok的,然后,还原,原来的ID名称,再去浏览页面运行, ...
- 15_Web框架-mini frame
1.WSGI协议概述(Python Web Server Gateway Interface) 1.WSGI允许开发者将选择web框架和web服务器分开,可以混合匹配web服务器和web框架,选择一个 ...
- C001:打印勾
程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { printf(" *\n"); p ...
- [Oracle/SQL]找出id为0的科目考试成绩及格的学生名单的四种等效SQL语句
本文是受网文 <一次非常有意思的SQL优化经历:从30248.271s到0.001s>启发而产生的. 网文没讲创建表的数据过程,我帮他给出. 创建科目表及数据: CREATE TABLE ...
- sublime3 激活
起因 这段时间sublime一直抽风,每次打开都提示让我更新. 身为强迫症的我当然不能忍! 方法 关闭自动更新 点击菜单栏"Preferences"=> "Sett ...