Java学习路线(19)——IO流(下)

一、缓冲流

1、概念: 一种自带缓冲区的字节流、可提高原始字节流、字符流读写数据的性能。

2、缓冲流高性能原理: 磁盘与内存之间有一块存储区域,当磁盘向内存传输数据时,先传输到缓冲区,当缓冲区满了之后,一起传输给内存中,如图所示。
在这里插入图片描述
3、缓冲流类型

  • BufferedInputStream 字节缓冲输入流
  • BufferedOutputStream 字节缓冲输出流
  • BufferedReader 字符缓冲输入流
  • BufferedWriter 字符缓冲输出流

4、字节缓冲流性能优化原理: 字节缓冲流自带8KB缓冲池,以便我们读取写入数据。

5、创建缓冲流API

构造器说明
BufferedInputStream(InputStream in)为指定字节输入流创建缓冲区
BufferedInputStream(InputStream in,int size)为指定字节输入流创建指定大小的缓冲区
BufferedOutputStream(OutputStream in)为指定字节输出流创建缓冲区
BufferedOutputStreamStream(OutputStream in,int size)为指定字节输出流创建指定大小的缓冲区
BufferedReader(Reader in)为指定字符输入流创建缓冲区
BufferedReader(Reader in,int size)为指定字符输入流创建指定大小的缓冲区
BufferedWriter=(Writer in)为指定字符输出流创建缓冲区
BufferedWriterStream(Writer in,int size)为指定字符输出流创建指定大小的缓冲区

缓冲字符流新增API

方法说明
String readLine()读取文本的一行
public class BufferedStreamDemo{public static void main(String[] args) {try(/*1、创建字符缓冲输入流*/BufferedReader br = new BufferedReader(new FileReader("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\loco.txt"));) {while(br.ready()){System.out.println(br.readLine());}System.out.println("复制完整");} catch (IOException e) {throw new RuntimeException(e);}}
}

二、转换流

1、概念: 由于不同编码会导致读取乱码问题,所以转换流能够转换成指定编码的输入流。

2、类型

  • InputStreamReader 字符输入转换流
  • OutputStreamReader 字符输出转换流

3、获取转换流

构造器说明
InputStreamReader(InputStream is)把原始字节流按照代码默认编码转换成字符输入流
InputStreamReader(InputStream is, String charset)把原始字节流按照指定编码转换成字符输入流
OutputStreamWriter(OutputStream is)把原始字节流按照代码默认编码转换成字符输出流
OutputStreamReader(OutputStream is, String charset)把原始字节流按照指定编码转换成字符输出流

三、序列化与反序列化

1、对象序列化的概念: 以内存为基准,把内存中的对象存储到磁盘文件中,称为序列化,反之则为反序列化
2、对象字节IO流:

  • ObjectInputStream

(1)获取输入流

构造器说明
ObjectInputStream(InputStream out)把低级字节输入流包装成高级的对象字节输入流

(2)写入输入流

方法说明
void readObject()把对象从流中读出

反序列化对象

public class ObjectOutputStreamDemo {public static void main(String[] args) {/*1、空对象*/User user = new User();try (/*2、创建对象字节流*/ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\out.txt"));){user = (User) ois.readObject();System.out.println(user);} catch (IOException | ClassNotFoundException e) {throw new RuntimeException(e);}}
}/*打印输出*/
User{id='9fd3f9ea-2783-4327-bdd3-b10e7683d59a', username='Administrator', password='asfdsgasdfdEW1245EWFC', age=25}
  • ObjectOutputStream

获取输出

构造器说明
ObjectOutputStream(OutputStream out)把低级字节输出流包装成高级的对象字节输出流

写入数据

方法说明
void writeObject(Object obj)将对象序列化输出至流中

序列化对象

public class ObjectOutputStreamDemo {public static void main(String[] args) {/*1、对象初始化*/User user = new User(UUID.randomUUID().toString(),"Administrator","asfdsgasdfdEW1245EWFC",25);try (/*2、创建对象字节流*/ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\out.txt"));){/*3、写入文件*/oos.writeObject(user);System.out.println("序列化完成");} catch (IOException e) {throw new RuntimeException(e);}}
}/*实现Serializable接口才能序列化*/
class User implements Serializable{private String id;private String username;private String password;private int age;public User() {}public User(String id, String username, String password, int age) {this.id = id;this.username = username;this.password = password;this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

out.txt

�� sr com.zengoo.logback.User8�b�Xy� I ageL idt Ljava/lang/String;L passwordq ~ L usernameq ~ xp   t $9fd3f9ea-2783-4327-bdd3-b10e7683d59at asfdsgasdfdEW1245EWFCt 
Administrator

注意: 若对象中有属性不希望被序列化,则添加transient关键字声明


四、打印流

1、概念: 打印流实现方便、高效的在文件中写入数据。

2、类型

  • PrintStream(支持字节打印)
构造器说明
PrintStream(OutputStream out)打印流直接通向字节输出流管道
PrintStream(File f)打印流直接通向文件对象
PrintStream(String apth)打印流直接通向文件路径
方法说明
void print(E e)打印任何类型的数据

打印数据到文件示例

public class PrintDemo {public static void main(String[] args) {try(/*1、创建打印流*/PrintStream printStream = new PrintStream("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\out.txt");) {printStream.println("东临碣石".toCharArray());printStream.println("以观沧海".toCharArray());printStream.println("水何澹澹".toCharArray());printStream.print("山岛竦峙".toCharArray());System.out.println("打印完毕");} catch (FileNotFoundException e) {throw new RuntimeException(e);}}
}

out.txt

东临碣石
以观沧海
水何澹澹
山岛竦峙
  • PrintWriter(支持字符打印)
构造器说明
PrintWriter(OutputStream out)打印流直接通向字节输出流管道
PrintWriter(Writer writer)打印流直接通向字符输出流管道
PrintWriter(File f)打印流直接通向文件对象
PrintWriter(String apth)打印流直接通向文件路径
方法说明
void print(E e)打印任何类型的数据

3、输出语句重定向(打印流的应用)

主要用于将控制台打印的语句输出到文件中保存。

PrintStream ps = new PrintStream("文件地址");
System.setOut(ps)

五、Propertis

1、概念: Propertis 意思是 属性,所以它虽然是隶属于集合类,但通常不用它作为集合使用。
2、作用: Propertis代表一个属性文件,可以将自己的键值对信息存入到数据文件中去。
3、Propertis常用API

方法说明
void load(InputStream inStream)从输入字节流中读取属性列表(键值对)
void load(Reader reader)从输入字节流中读取属性列表(键值对)
void store(OutputStream out, String comments)将此属性列表写入此Propertis列表中,以适用于使用load(InputStream) 方法的格式写入输出字节流
void store(Writer writer, String comments)将此属性列表写入此Propertis列表中,以适用于使用load(InputStream) 方法的格式写入输出字符流
Object setProperty(String key, String value)保存键值对(put)
String setProperty(String key)使用键搜索属性值(get)
Set<String> stringPropertiesNames()所有键名集合(keySet())

使用Properties示例

public class PropertiesDemo {public static void main(String[] args) throws IOException {/*创建属性集合*/Properties properties = new Properties();properties.setProperty("id","123");properties.setProperty("username","Admin");properties.setProperty("password","avtbhn324t@");properties.setProperty("sex","male");System.out.println(properties);/*保存管道*/properties.store(new FileWriter("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\users.properties"),"It's user base-info");}
}/*打印输出*/
{password=avtbhn324t@, sex=male, id=123, username=Admin}

users.properties

#It's user base-info
password=avtbhn324t@
sex=male
id=123
username=Admin

加载Properties文件

public class PropertiesLoadDemo {public static void main(String[] args) throws IOException {Properties properties = new Properties();properties.load(new FileReader("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\users.properties"));System.out.println(properties);}
}/*打印输出*/
#It's user base-info
password=avtbhn324t@
sex=male
id=123
username=Admin

获取Properties中的数据

public class PropertiesGet {public static void main(String[] args) throws IOException {Properties properties = new Properties();properties.load(new FileReader("D:\\JavaBase\\JavaSEpro\\src\\com\\zengoo\\logback\\users.properties"));/*根据键值获取值*/System.out.println(properties.getProperty("username"));System.out.println(properties.getProperty("password"));/*获取所有键名*/System.out.println(properties.stringPropertyNames());}
}/*打印输出*/
Admin
avtbhn324t@
[password, sex, id, username]

六、IO框架——commons-io

具体的API查看commons-io的技术文档。

1、概述: commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以提高IO功能开发的效率。

2、主要类

  • FileUtils

常用API

方法说明
String readFileToString(File file, String encoding)读取文件中的数据,返回字符串
void copyFile(File srcFile, File destFile)复制文件
void copyDirectoryToDirectory(File srcFile, File destDir)复制文件夹
  • IOUtils

3、使用commons-io
(1)下载commons-io-xx.jar
(2)加载到项目中
(3)导包使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/256138.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

c语言仿宋gb2312字体,仿宋gb2312字体官方下载|仿宋gb2312字体下载官方版 - 维维软件园...

仿宋gb2312字体你要找它吗&#xff0c;最近很多小伙伴在重装系统后发现win7提示没有这款仿宋gb2312字体也没有楷体_GB2312字体了&#xff0c;另外有些PDF可能会提示缺这个仿宋gb2312字体&#xff0c;因此运行软件或打开网页显示的字体非常奇怪&#xff0c;其实这是因为你在安装…

html设置字体仿宋GB2312,Word怎么设置仿宋体显示为仿宋GB2312字体?

做好的Word文档在系统升级后&#xff0c;或更换电脑后&#xff0c;原来设置的字体突然都变了&#xff0c;排版效果全乱&#xff0c;找不出问题在哪&#xff0c;挨个修改&#xff0c;不甚其烦。在经历过这磨难后&#xff0c;我决定刨根问底。才发现原来是XP系统和win7之间字体不…

工程图字体宋体仿宋_设计干货来了!最热门的宋体字要如何设计搭配?

字体设计搭配是一位优秀设计师必须掌握的学问,宋体字作为汉字最常见的一种字形,如何将宋体运用搭配好呢?一流设计网来为您逐一分析。 虽然说宋体字叫做宋体字,但是如果要追溯宋体字的起源,我们还得从唐朝说起。 唐朝时期,佛教在中国开始盛行开来,唐朝皇帝甚至派出唐僧师…

c语言仿宋gb2312字体,gb2312字体下载|仿宋gb2312字体 v2.0 官方版-520下载站

仿宋gb2312字体是一款非常多用户在使用的官方印刷字体&#xff0c;仿宋GB2312字体安装方便&#xff0c;具有工整、笔画均匀的特点&#xff0c;欢迎有需要的用户来本站下载使用。 仿宋gb2312字体基本简介&#xff1a; 仿宋_GB2312字体是印刷字体的一种 &#xff0c;仿照宋版书上…

c语言仿宋gb2312字体,【仿宋gb2312字体下载】仿宋gb2312字体官方下载 免费版-七喜软件园...

仿宋gb2312字体是Windows系统中很常见使用的一款经典字体&#xff0c;GB2312字体是印刷字体中的一种字体&#xff0c;仿宋gb2312字体就是一种大众常用印刷字体&#xff0c;该字体是模仿宋版书上所刻的字体而形成的一种新型字体&#xff0c;该字体笔画粗细均匀&#xff0c;有长、…

鱼骨图工具

鱼骨图是一个不错的工具&#xff0c;但是真正用好的不多&#xff0c;其实鱼骨图也是一种树状结构&#xff0c;跟功能树类似。 树状结构有一个不好的情况是不能反应影响因子的交集。但是对于大部分情况来说&#xff0c;设计产品也好&#xff0c;工艺分析也好&#xff0c;故障分析…

鱼骨图技能详解+13张精选模板,让你3分钟快速掌握鱼骨图分析法!

鱼骨图看似很简单&#xff0c;其实有很多操作要点&#xff0c;它是一个非定量的工具&#xff0c;可以帮助我们找出引起问题的根本原因&#xff0c;使我们问自己&#xff1a;问题为什么会发生&#xff1f;促使人把目光聚焦于问题的原因&#xff0c;而非问题的症状。 接下来从鱼骨…

利用思维导图软件绘制鱼骨图怎样做

思维导图的类型有哪些&#xff1f; 圆圈图主要用于把一个主题展开来&#xff0c;联想或描述细节。小圈圈是主题&#xff0c;而外面的大圈圈里放的是和这个主题有关的细节或特征气泡图由很多泡泡组成&#xff0c;中间一个主题泡泡描述核心主题&#xff0c;周围的属性泡泡描述关于…

“鱼骨图”勾勒合理ERP项目进度计划

一个好的ERP(Enterprise Resource Planning)项目进度计划是能够保证ERP项目成功实施的关键之一。ERP项目进度计划一般采用里程碑管理,将ERP项目分为五个阶段:项目准备、业务蓝图设计、系统实现、上线准备、上线和上线支持;根据客户的需求制订每一个阶段实施时间。如何为每一…

如何用XMind绘制鱼骨图

鱼骨图因常常被用于问题的分析以及解决方法&#xff0c;所以又被称为因果图。鱼骨图一直是XMind思维导图软件的拿手好戏之一&#xff0c;一直被模仿从未被超越。让我们一起通过本篇文章&#xff0c;探讨XMind鱼骨图的秘密吧。 当你打开XMind思维导图后&#xff0c;就可以在新建…

XMind是怎么绘制鱼骨图

鱼骨图因常常被用于问题的分析以及解决方法&#xff0c;所以又被称为因果图。鱼骨图一直是XMind思维导图软件的拿手好戏之一&#xff0c;一直被模仿从未被超越。让我们一起通过本篇文章&#xff0c;探讨XMind鱼骨图的秘密吧。 当你打开XMind思维导图后&#xff0c;就可以在新建…

C++ vector类成员函数介绍

目录 &#x1f914;vector模板介绍&#xff1a; &#x1f914;特点&#xff1a; &#x1f914;vector的成员函数&#xff1a; &#x1f50d;vector构造函数&#xff1a; &#x1f50d;vector赋值函数 &#x1f50d;vector容器的判断函数 resize函数的重点内容&#xff1a; …

燃尽图、甘特图、鱼骨图

1. 燃尽图 燃尽图&#xff08;burn down chart&#xff09;是在项目完成之前&#xff0c;对需要完成的工作的一种可视化表示。燃尽图有一个Y轴&#xff08;工作&#xff09;和X轴&#xff08;时间&#xff09;。理想情况下&#xff0c;该图表是一个向下的曲线&#xff0c;随着…

java 鱼刺图_使用java实现鱼刺图

刚毕业了&#xff0c;这是毕业设计的java web项目中的一个功能&#xff0c;使用鱼刺图进行辅助管理&#xff0c;在做的过程中&#xff0c;没有找到国内有公开的研究资料&#xff0c;不管是哪一种语言&#xff0c;所以就自己做了一个java的鱼刺图生成插件&#xff0c;虽然毕业设…

燃尽图,甘特图,鱼骨图

1. 燃尽图 燃尽图&#xff08;burn down chart&#xff09;是在项目完成之前&#xff0c;对需要完成的工作的一种可视化表示。燃尽图有一个Y轴&#xff08;工作&#xff09;和X轴&#xff08;时间&#xff09;。理想情况下&#xff0c;该图表是一个向下的曲线&#xff0c;随着…

1500_什么是鱼骨图以及鱼骨图如何使用

全部学习汇总&#xff1a; GreyZhang/g_project_management: some knowledge about project management. (github.com) 鱼骨图在过去多年的工作中我是看到过的&#xff0c;但是相关的工作中其实一直没有接触到。我所遇到的问题&#xff0c;一般也不到了需要总结分析的程度。这对…

如何有效理清对象间逻辑关系?XMind鱼骨图帮你轻松搞定!

从效果开始&#xff0c;鱼骨图的每个分支都代表问题的一个原因。主分支显示所有可能的原因&#xff0c;而子分支则在背后挖掘“为什么”。因此&#xff0c;鱼骨图也被称为“因果图”。 鱼骨图有何用呢&#xff1f; 鱼骨图是逻辑图的派生。他们看起来很相似。鱼骨是分析问题的思…

大咖驾到!5A学霸教你如何使用鱼骨图解决项目难题

在船舶制造行业从业9年&#xff0c;并以5A的好成绩完美通过PMP考试的学霸来了&#xff01; 小编今天邀请到了1903级的学员刘艺为大家讲解鱼骨图在实际生活中的应用&#xff0c;来跟着我们一起学习用鱼骨图来分析项目运行过程中出现的问题吧。 个人介绍 INTRODUCTION 我所在…

质量工具之鱼骨图

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 1. 什么是鱼骨图 鱼骨图&#xff0c;因其形状如鱼骨&#xff0c;所以叫鱼骨图&#xff08;以下称鱼骨图&#xff09;。由日本管理大师石川馨先生所发明&#xff0c;故又名石川图。&#xff0c;它是一种透过现象看本质的分析…

鱼骨图介绍及制作

鱼骨图 什么是鱼骨图 鱼骨图是一种图表&#xff0c;用来展示分支关系或流程。它通常以中心为起点&#xff0c;由中心向外延伸出若干条脊梁&#xff0c;再由脊梁连接相关的分支&#xff0c;形成一个树状结构。鱼骨图常用于解释流程、组织结构、产品规划等。 下面列举一个例子: 如…