java IO流笔记分享

目录

文件

文件的概念

文件流

常用的文件操作

IO流原理及流的分类

Java IO流原理

流的分类

IO流体系图-常用的类

字节流

字符流

节点流和处理流

节点流和处理流概念

节点流和处理流的区别和联系

处理流-BufferedReader 和 BufferedWriter

BufferedIntputStream 和 BufferedOutputStream

对象处理流——ObjectInputStream 和 ObjectOutputStream

ObejectInputStream

ObjectOutputStream

序列化和反序列化

序列化的注意事项:

SerialVersionUID

Serializable(可序列化的)

Externalizable

转换流(InputStreamReader 和 OutputStreamWriter)

InputStreamReader类图

OutputStreamWriter类图

转换流的概念

为什么需要转换流?

转换流主要解决什么方便的问题?

打印流

PrintStream流的类图

PrintWriter流的类图

Properties(配置文件)

properties常见的方法


文件

文件的概念

文件就是保存数据的地方。

文件流

文件在程序中是以流的形式来操作的。

类比图:

常用的文件操作

创建文件对象:

new File(String 路径) new File(File 父目录文件 String 子路径构建)

new File(String 父目录文件 String 子路径构建)

创建新文件: createNewFile

获取文件的相关信息:

getName、getAbsoulutePath、getParent、length、exists、isFile、isDirectory

目录的操作:

mkdir: 创建一级目录、mkdirs: 创建多级目录、delete: 删除空目录或文件

IO流原理及流的分类

Java IO流原理

Java程序中,对于数据的输入/输出操作以“流(stream)”的方式进行。

java.io包提供了各种“流”类和接口,用以获取不同种类的数据,并通过方法输入或输出数据。

输入input:读取外部设备到程序中。

输出output:将程序的数据输出到磁盘、光盘等存储设备中。

流的分类

按操作数据单位不同分为:字节流(8 bit)、字符流(按字符,对应几个字节)文本文件。

按数据流的流向不同分为:输入流,输出流。

按流的角色的不同分为:节点流,处理流/包装流。

IO流体系图-常用的类

字节流

FileInputStream: 文件输入流

FileOutputStream:文件输出流

字符流

FileReader:文件输入流

read:每次读取单个字符,返回该字符,如果文件末尾返回-1。

read(char[]):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1。

FileWrite:文件输出流

注意 :FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。

节点流和处理流

节点流和处理流概念

节点流可以从一个特定的数据源读写数据

处理流(也叫包装流)是连接再已存在的流(节点或处理流)之上,为程序提供更为强大的读写功能,也更加灵活。

分类

字节输入流

字节输出流

字符输入流

字符输出流

节点流

抽象基类

InputStream

OutputStream

Reader

Writer

访问文件

FileInputStream

FileOutputStream

FileReader

FileWriter

访问数组

ByteArrayIntputStream

ByteArrayInputStream

CharArrayReader

CharArrayWriter

访问字符串

StringReader

StringWriter

缓冲流

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

处理流

转换流

InputStreamReader

OutputStreamWriter

抽象基类

FilterInputStream

FilterOutputStream

FilterReader

FileterWriter

打印流

PrintStream

PrintWriter

推回输入流

PushbackInputStream

PushbackWriter

特殊流

DataInputStream

DataOutputStream

节点流和处理流的区别和联系

  1. 节点流是底层流/低级流,直接跟数据源相接。
  2. 处理流(包装类)包装节点流,即可以消除不同节点流的实现差异,也可以提供更方便的方法完成输入输出。
  3. 处理流(包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连(模拟修饰器设计模式)

处理流-BufferedReader 和 BufferedWriter

处理流 -BufferedReader 和 BufferedWriter 属于字符流,是按照字符来读取数据的

关闭时处理流,只需要关闭外层流即可

BufferedIntputStream 和 BufferedOutputStream

处理流 -BufferedIntputStream 和 BufferedOutputStream 属于字节流,是按照字节来读取数据的

字节流也可以处理字符流

对象处理流——ObjectInputStream 和 ObjectOutputStream

就是能够将基本数据类型或者对象进行序列化 和 反序列化的过程

ObejectInputStream

ObjectOutputStream

序列化和反序列化
  1. 序列化就是在保存数据时,保存数据的值和数据类型
  2. 反序列化就是在恢复数据时,恢复数据的值和数据类型
  3. 需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的该类必须实现两个接口之一(Serializable)和(Externalizable)
序列化的注意事项:
  1. 读取(反序列化)的顺序需要和你保存的顺序一致,否则就要异常。
  2. 要求序列化或反序化的对象,需要实现Serializable
  3. 序列化的类中建议添加SerialVersionUID,为了提高版本的兼容性。
  4. 序列化对象时,默认将里面所有属性都将进行序列化,但除了Static或transient修饰的成员
  5. 序列化对象时,要求里面属性的类型也需要实现序列化接口
  6. 序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也默认实现了序列化
SerialVersionUID

private static final long serializable = 1L;

Serializable(可序列化的)

一般实现使用Serializable接口,是一个标记接口;

Externalizable

转换流(InputStreamReader 和 OutputStreamWriter)

com.hspedu.transformation CodeQuestion.java

InputStreamReader类图

OutputStreamWriter类图

转换流的概念

将字节流转换成字符流。

InputStreamReader:Reader的子类,可以将inputStream(字节流)包转成Reader(字符流)

OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)

当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文乱码问题,所以建议将字节流转成字符流。

可以在使用时指定编码格式(比如 UTF-8,gbk,gb2312,ISO8859-1等)。

为什么需要转换流?

转换流主要解决什么方便的问题?

打印流

打印流只有输出流没有输入流

PrintStream流的类图

PrintWriter流的类图

Properties(配置文件)

properties底层是hashtable所以方法都是hashtable。

properties常见的方法

load:加载配置文件的键值对到properties对象

list:将数据显示到指定设备

getProperty(key):根据键获取值

setPropery(key,values):设置键值到Properties对象

store:将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文,如果含有中文。会存储为unicode码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值