JavaSE入门级-第十六课-输入输出流IO

 

前言

输入输出流(stream),就是读入数据,和输出数据,数据往往用文件的方式保存,所以输入和输出和文件有直接关系,文件因为 数据内容 和 使用方向 还有类型的区分,表现在后缀名不同

 

java.io.File 文件

java对于文件的操作,封装在类File中

File类可以操作文件或者目录,也就是可以访问磁盘,管理文件或文件夹,但是特别注意File不能访问文件的内容本身

l  代码实例:

 

 

 

知识补充 分隔符

在windows平台中,文件的目录有盘符 C:\\ 有 目录分符号 \,而在Linux平台中使用 /

注意:在java中 左右斜线都应该用转译字符表示 \\ , /

File类常用方法

 

 

 

 

l  代码实例:

 

 

 

 

练习:

l  使用File类创建一个文件,探究试用File类的其他方法(可查阅文档)

 

 

 

 

文件属性及结构

打印工作空间下的文件结构

 

 

 

递归调用输出文件名

 

 

 

 

练习:

l  将一个目录中的结构所有文件,按大小从小到大输出

提示:使用map,key表示文件内容长度,value表示文件名列表

 

 

 

 

 

 

 

 

 

 

文件File可以控制文件的属性和行为,如果需要操作文件内容需要使用 流 Stream

l  下图所示:

 

 

 

l  提醒:数据需要编程 电信号,也就是0 和 1传递

 

l  输入流 与 输出流

 

 

 

l  输入流:从文件 → 内存

l  输出流:从内存 → 文件

 

java中的流

java提供了一组抽象类,InputStream,OutputStream

l  使用IO一般会有IOException,需要显示 try-catch

l  InputStream 常用方法

 

 

 

l  OutputStream 常用方法

 

 

 

 

抽象类表示一种标准,根据多态性子类会有不同实现,但是操作的方法是一样滴

 

FileInputStream与FileOutputStream

是InputStream 和OutputStream 的对应实现类

 

 

 

 

l  代码示例:

 

 

 

注意:使用完输出流需要close,首先GC不会扫描这个对象,其次数据安全考虑

 

练习:

l  使用文件输入输出流,完成文件内容复制

提示:

-      使用FileInputStream入读文件内容保存在内存中

-      使用FileOutputStream输出内容到文件中

-      使用File创建文件或文件夹

-      注意:资源关闭 清空缓冲区

 

 

 

 

 

FileWriter与FileReader

l  java中按照字节去操作数据读写是一个不稳定的过程,因为一个汉字 2个字节,如果在按照1个字节的单位传输,可能出现中断情况导致乱码,我们应该按照char为单位

l  代码示例如下:

 

 

 

ü  代码解析:上图代码中我们可以看到把字符作为操作单位,而且还提供了String的参数,使用起来更方便

ü  注意:上图中的类 Reader 已经不是属于 Stream的类,是和Stream一样的另外两个抽象类,他们是以char作为基本操作单位

练习:

l  写一篇《墓志铭》到文件中

l  在java控制台写一篇日记,然后保存在文件中,使用FileWriter 或 FileReader

提示:

-      使用日期API记录时间,姓名,内容等,生成文件名也需要注意包含日期

BufferWriter 与 BufferReader

l  使用字符操作能够提升用户体验,但是对于硬件是一个考验,可能我们需要寻求一个更好的方式,而不是每次都是一直占用输入输出流,这样在高并发下容易出问题

l  缓冲,就是缓缓的冲(缓冲是先积累数据,一次性写入,集能量放大招

l  代码实例:

 

 

 

 

文本读写中容易出现的乱码问题

 

l  设置成为UTF-8编码,或者字符串重构成为UTF-8编码

 

 

 

练习:

l  有模版文件 resume.txt 中,有固定内容如下:

-      从前有座山,叫{moutian},山里有座庙,叫{temple},庙里有和老和尚叫{name}

-      去读这个文件的信息,要求用户输入三个变量迅速替换内容

-      使用String.relace(oldChar,newChar);

 

项目应用

l  配置mysql.txt文件,在项目中通过IO加载文件读取数据库连接信息

 

 

 

对象序列化

l  数据传输的单位可以使用byte,因为字符才是文本的最小单位所以使用char,但是在面向对象编程中,对象是编程的基本单位,序列化只的是,把对象转变成为流的形式,能够整体传输

ü  序列化:对象 → 流

ü  反序列化:流 → 对象

 

Serializable 序列化接口

一个对象如果需要序列化,那么它的类必须实现Serializable(Externalizable)接口,实现此接口没有需要实现的抽象方法,它会给定一个版本标识

l  代码示例:

 

 

 

 

ObjectOutputStream 与 ObjectInputStream

对象序列化,将内存对象流话并且保存在对应文件中

l  代码示例:

 

 

 

 

反序列化,将文件中的内容读取,在内存中恢复成为对象

l  代码实例:

 

 

 

练习:

l  不使用数据库,完成系统的注册功能

提示:讲数据对象保存在文件中,序列化与反序列化,再读取校验

 

java.util.Properties 属性文件

l  Properties表示持久属性,可以配合IO载入文件使用,载入文件名后缀必须为.properties,且配置方式必须为key = value 形式

l  代码示例:

 

 

 

 

l  文件内容如下:

 

 

 

l  加载成功后 Properties 有常用方法:

方法名

方法功能

getProperty(key)

使用此属性列表中指定的键搜索属性

getProperty(key, defaultValue)

使用此属性列表中指定的键搜索属性

load(InputStream)

从输入字节流读取属性列表键和元素

load(Reader)

简单的线性格式从输入字符流读取属性列表

loadFromXML(InputStream in)

将指定输入流中的XML文档表示的所有属性加载到此属性表中

setProperty(String key, String value)

设置 Hashtable方法 put

ü  注意:先加载文件,自动封装成为 Map格式

 

l  代码实例:

 

 

 

 

Excel导出

l  在业务系统研发中,一个标准的业务视图功能,一定有 CRUD,download,onload

l  apache提供了支持Excel导出的专用包poi

  常用类解析:

-      HSSFWorkbook:对应一个工作簿

-      HSSFSheet:对应一个Excel表格Sheet

-      HSSFRow:对应一个Excel行

-      HSSFCell:对应一个Excel列

-      HSSFFont:对应单元格字体

-      HSSFDataFormat :对应单元格日期格式

-      HSSFHeade:Excel文档Sheet的页眉

-      HSSFFooter :Excel文档Sheet的页脚

-      HSSFCellStyle:格子单元样式

ü  注意:先有工作部在创建表格,先有行,在创建对应列,操作顺序从 0 开始

 

文件写入,和导出操作

  代码示例:

 

 

 

  代码解析:

操作Excel数据与格式之后,可以使用FileOutputStream写出到目录中

 

添加摘要信息

 

 

 

 

创建批注

 

 

 

 

创建页眉页脚

 

 

 

 

合并单元格

 

 

 

 

组合行或列

组合指的是数据有一个 + 效果可以展开或关闭

 

 

 

 

锁定列

 

 

 

 

 

 

设置密码

 

 

 

 

下拉菜单

 

 

 

 

练习:

l  实现员工管理系统的功能页面,包括新增,修改,删除,查询,导出

 

posted @ 2021-07-22 08:58  二娃千里眼  阅读(110)  评论(0)    收藏  举报