我的学习之路_第十一章_字符流

author author     2022-09-04     421

关键词:

【字符流】

IO流的分类

★字节流 操作的文件不是文本文件

字节输入流: InputStream 抽象类

FileInputStream操作文件的字节输入流

字节输出流: OutputStream 抽象类

FileOutputStream操作文件的字节输出流


★字符流 操作的文件是文本文件

字符输入流: Reader 抽象类

FileReader 用来操作文件的字符输入流

字符数出流: Writer 抽象类

FileWriter 用来操作文件的字符输出流


【转换流】

▲OutputStreamWriter extends Writer 所属包:java.io.OutputStreamWriter

作用:是字符流通向字节流的桥梁,可以指定编码表

继承自父类 Writer 的公共成员方法

写一个字符,写字符数组,写字符数组的一部分,写字符串,写字符的一部分,刷新,关闭

构造方法:

OutputStreamWriter(OutputStream out,String charsetName) 创建使用指定字符集的 OutputStreamWriter

参数:
OutputStream out : 字节输出流(把转换后的字节写入到文件中)
可以传入FileOutputStream
String charsetName : 编码表名称
可以传入一个字符串格式的编码表名称,比如"GBK","utf-8"...,编码表名称不区分大小写,如果不写默认为系统码表
使用步骤:
1.创建字符输出流FileOutputStream,绑定数据的目的地
2.创建转换流OutputStreamWriter对象,构造方法中传入FileOutputStream和指定的编码表名称
3.调用OutputStreamWriter中写数据的方法,把数据写入到内存缓冲区中
4.释放资源,并把数据刷新到文件中


▲InputStreamReader extends Reader

作用:是字符流通向字节流的桥梁,可以指定编码表

继承自父类 Writer 的公共成员方法

int read() 读取单个字符.
int read(char[] cbuf) 将字符读入数组
abstract void close() 关闭该流并释放与之关联的所有资源.

构造方法:

InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader
InputStreamReader(InputStream in,String charsetName) 创建使用指定字符集的 InputStreamReader

参数: InputStream in:字节输入流(把文件中保存的字节读取出来)
可以传入FileInputStream
String charsetName:编码表名称
可以传入一个字符串格式的编码表名称,比如"GBK","utf-8"...,编码表名称不区分大小写,如果不写默认为系统码表


使用步骤:
1.创建字节输入流FileInputStream对象,绑定数据源
2.创建转换流InputStreamReader对象,构造方法中,传入FileInputStream和指定的编码表名称
3.使用InputStreamReader读取数据的方法,读取数据
4.释放资源

★ 注意:构造方法中指定的编码名称,必须和要读取的文件保持一致,否则会出现乱码


【序列化流和反序列化流】

【对象的序列化:把对象以流的方式写入到文件中保存】

●构造方法:
ObjectOutputStream(OutputStream out) 创建写入指定OutputStream 的 ObjectOutputStream
参数:
OutputStream out: 字节流,可以传入FileOutputStream.

使用步骤:
1.创建对象,并赋值
2.创建字节输出流对象FileOutputStream,绑定数据目的地
3.创建序列化流ObjectOutputStream对象,构造方法中传入FileOutputStream
4.使用ObjectOutputStream中的方法writeObject,把对象写入到文件中
5.释放资源
★注意:
要序列化的类如果没有实现Serializable接口,会抛出NotSerializableException异常

【对象的反序列化:把文件中保存的对象,以流的方式读取出来】

●构造方法:
ObjectInputStream(InputStream in)创建从指定InputStream 读取的ObjectInputStream.
参数:
InputStream in :字节流,可以传入FileInputStream

读对象的方法:
返回值:Object readObject() 从ObjectInputStream读取对象.

使用步骤:
1:创建字节输入流FileInputStream,绑定数据源
2:创建反序列化流ObjectInputStream,构造方法中传入FileInputStream
3.使用ObjectInputStream中的方法readObject,读取文件中保存的对象
4.释放资源
5.打印对象

★注意:
方法readObjec,会抛出ClassNotFoundException(没有class文件异常)
反序列化的前提,必须有对象的class文件存在.

 


〓类通过实现java.io.Serializable接口以启用其序列化功能.未实现此接口的类将无法使其任何状态序列化或反序列化

Serializable接口:称之为标记型接口
类只有实现了Serializable才能序列化和反序列化,不实现就不能

★序列化和反序列的是对象,如果对象中有静态的属性,可以序列化吗?

静态属于类,不属于对象,不能序列化
不管是静态属性和非静态属性都有默认值
如果是静态属性,不能被序列化,那么就使用它的默认值

瞬态关键字 【 transient 】 :作用, 阻止成员变量序列化


【打印流】

字节打印流:PrintStream extends OutputStream
字符打印流:PrintWriter extends Writer

两个打印流中的方法完全一致:
void print(Object obj) 输出任意类型的数据
void println(Object obj) 输出任意类型的数据,自动写入换行操作

构造方法: 就是打印流的输出目的端

PrintStream
构造方法目的地:接受File类型,接收字符串文件名,接收字节输出流OutputStream
PrintWriter
构造方法目的地:接受File类型,接收字符串文件名,接收字节输出流OutputStream

★注意事项:
字节流写入数据的时候,会直接把数据写入到文件中
字符流写入数据的时候,会把数据写入到内存缓冲区中,必须刷新或者关闭,才会把数据有缓冲区刷新到文件中


字符打印流的自动刷新功能:

1.字符打印刘的输出的目的地必须是一个流对象(字符,字节)
2.字符打印流构造方法的参数autoFlush必须是true
3.必须使用 println、printf 或 format 方法中的一个才能实现

包含自动刷新的构造方法:

PrintWriter(OutputStream out, Boolean autoFlush)
PrintWriter(Writer out, boolean autoFlush)
我们可以把字符串的目的地和File类的目的地转换为流,开启自动刷新


【Properties类】

Properties集合 extends Hashtable implements Map 集合 所属包:java.util.Properties

Properties集合的特点:
1:键和值默认都是String类型
2:集合中有自己特有的方法
返回值:Object SetProperty(String key,String value) 调用Hashtable的方法 put.
返回值:String getProperty(String key) 用指定的键在此属性列表搜索属性. 相当于Map集合中的get(Key k) 方法
返回值Set<String> StringPropertyNames() 返回此属性列表中的键集 相当于Map集合中的keySet.

3:和IO流相结合的方法
使用store 方法把集合中保存的临时数据,持久化到硬盘的文件中保存
返回值:void store(OutputStream out, String cpmments)
返回值:void store(Writer writer, String comments)
方法参数:
OutputStream out:不能操作中文
Writer writer:可以操作中文
String comments:注释,保存数据的用途,可以写null,不能写中文,默认使用unicode编码

使用步骤:
1.创建Properties集合,添加数据
2.创建字节输出流或者字符输出流对象,绑定目的地
3.使用Properties集合中的方法store把集合中的数据,写入到文件中
4.释放资源

 


使用load方法把硬盘文件中保存的键值对,读取出来,放入到Properties集合中
返回值:void load(InputStream inStream)
返回值:void load(Reader reader)
方法的参数:
InputStream inStream:不能读取包含中文的键值对
Reader reader: 可以读取包含中文的键值对

使用步骤:
1.创建创建Properties集合
2.创建字节输入流/字符输入对象,绑定数据源
3.使用Properties中的方法load,读取文件中保存的键值对,把键值对保存到集合中
4.释放资源
5.遍历Properties集合
★注意:
prop.properties文件中使用#号可以注释一行
prop.properties文件中key和value默认就是字符不用使用""
prop.properties文件中key和value之间可以使用=连接也可以使用空格


【Commons-IO】

使用commons-IO中提供的工具类FileUtils
方法都是静态的 static 可以通过类名直接使用 方法的参数都是File类型

readFileToString(File file):读取文件内容,并返回一个String

writeStringToFile(File file ,String content): 将内容content写入到file中;

copyFile(File srcFile, File destFile): 文件复制

copyDirectoryToDirectory(File srcDir , File destDir) 文件夹复制

我的学习之路_第十六章_xml

【XML】可扩展的标记语言作用:存放数据、配置文件【XML的语法】xml的文件扩展名必须为:xmlxml的内容必须满足以下要求:1.固定的文档声明 2.合格的元素和属性 3.正确的注释 4.符合要求的特殊字符编写规则●文档声明(<?xmlversion="1... 查看详情

第十一章第一节功

一.功1.功定义: 一个      作用在物体上,物体在                     ___________ 查看详情

我的学习之路_第十四章_反射

类的反射【获取class文件对象的三种方式】:●使用Object类中的方法getClass() Class<?>getClass()返回此Object的运行时类.●使用类名.class属性 每一个数据类型,基本数据类型和引用数据类型,Java都会为其设置一个class属性 例如:Classclas... 查看详情

第十一章_文件下载

11.1、文件下载概述1、将响应的内容类型设置为文件的内容类型。标头Content-type用来规定实体主体中的数据类型,包括媒体类型和子类型标识符。2、加入一个名为Content-Disposition的HTTP响应头,给它赋值attachment;filename=filename,这... 查看详情

我的学习之路_第十七章_javautils

【BeanUtils工具类】javaBaen:Java和数据库所对应关系实体类表(Utils)-->类(User)表中的列-->类中字段(属性)表中的行-->根据类创建的对象javaBean包含:1.私有的成员变量 2.公共的getter/setter方法 3.空参数构造方法 4.toSting方法 5.实现序... 查看详情

第十一章判断已输入的文字是否是数字

650)this.width=650;"src="http://s5.51cto.com/wyfs02/M01/89/15/wKiom1gHEN2Q445TAACRcIZ8s3U214.png-wh_500x0-wm_3-wmp_4-s_3150700510.png"title="1.png"alt="wKiom1gHEN2Q445TAACRcIZ8s3U214.png-wh_50"/><s 查看详情

第十一章实用类

下面的程序涉及到了类的构造函数,默认构造函数,析构函数,转换函数,友元函数,运算符重载。1//头文件,a.h2#ifndefa_H_//宏名不应以数字打头3#definea_H_45#include<string>67classAnimal8{9private:10std::stringanimal;11intweight;12intnum;1314publ... 查看详情

#java学习之路——基础阶段(第十一篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。前言:此随笔主要是J... 查看详情

第十一章springboot+mongodb(简单查询)

1、mongodb在mac上的安装下载mongodb,https://www.mongodb.org/解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb-osx-x86_64-3.2.6(这是我的mongodb的版本)配置PATH输入命令:"vi~/.bash_profile"添加如下两句配置:1exportMONGO_HOME=/Users/enniu 查看详情

“全栈2019”java第十一章:标识符

难度初级学习时间10分钟适合人群零基础开发语言Java开发环境JDKv11IntelliJIDEAv2018.3文章原文链接“全栈2019”Java第十一章:标识符下一章“全栈2019”Java第十二章:变量学习小组加入同步学习小组,共同交流与进步。方式一:关注... 查看详情

第十一章认识与学习bash

第十一章、认识与学习BASH1.认识BASH这个Shell  1.1硬件、核心与Shell  1.2为何要学文字接口的shell  1.3系统的合法shell与/etc/shells功能  1.4Bashshell的功能  1.5Bashshell的内建命令:type  1.6命令的下达2.Shell的变量功能  2.... 查看详情

io流入门-第十一章-printstream_printwriter

  DataInputStream和DataOutputStream基本用法和方法示例/*java.io.PrintStream:标准的输出流,默认打印到控制台,以字节方式java.io.PrintWriter:以字符方式*/importjava.io.*;importjava.util.Date;importjava.text.*;publicclassPrintStreamTest01{pub 查看详情

第十一章django框架学习——cookie和session

第十一章Django框架学习——Cookie和session 一、Cookie简介二、装饰器版登录校验三、session简介四、如何在CBV中使用装饰器 一、Cookie简介什么是Cookie(what):Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上... 查看详情

《java编程思想》学习笔记——第十一章持有对象

    JAVA容器类类库的用途是"保存对象",并将其划分为两个不同的概念:    1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能用重复元... 查看详情

o'reill的svg精髓(第二版)学习笔记——第十一章

第十一章:滤镜11.1滤镜的工作原理当SVG阅读器程序处理一个图形对象时,它会将对象呈现在位图输出设备上;在某一时刻,阅读器程序会把对象的描述信息转换为一组对应的像素,然后呈现在输出设备上。例如我们用SVG的<filt... 查看详情

第十一章笔记

                  类和对象学习本章用到的单词class:类object:对象return:返回返还,返还值programming:编程,程序设计null:空,空值initial:最初的,初始,初始值type:类型,种类oriented:面向,定向 对象现实世界中客观... 查看详情

第十一章常用文字字符串处理命令

一、sort      #排序将不相同的行进行排序在一起默认是根据第一列进行排序默认是以空白字符为分割符           #默认以字母进行排序选项: -k          #指定哪一列为分隔符 -n      ... 查看详情

我的学习之路_第四章_异常

一Object类equals方法:四则运算是不能操作引用类型的,而==可以操作引用类型,但是在任何时刻只要是用==比较引用类型,比较的永远都是地址值.返回类型Boolean比较两个对象是否相等,比较的是地址值Object的equals方法比较的是地址值,子... 查看详情