字节流结构

输入流:

ObjectInputStream:从文件中读取对象

FileInputStream:从文件中输入(读)字节

BufferedInputStream:底层有缓冲数组,在不定义数组的情况下,提高输入(读)效率

输出流:

ObjectOutStream:

经一个对象写入文件

FileOutputStream:

将数据输出(写)文件

BufferedOutputStream:

底层有缓冲数组,再不定义数组情况下,提高输出(写)效率

             字符流结构图

输入流:

FileReader:

输入(读)文本文件的数据

BuffereReader:

底层有缓冲数组,在不定义数组情况下,提高输入(读)效率,同时有特有readLine()方法,一次可以读取一整行数据

InputStreamReader:

是从字节流到字符流的桥梁:它读取字节,并使用指定的charset将其解码为字符.它使用的字符集可以有名

称指定,也可以被明确指定,或者使用平台的默认字符集

输出流:

FileWriter:

将数据输出(写)到文本文件

BufferedWriter:

底层有缓冲数组,再不定义数组的情况下,提高写入效率.同时有特有newLine()方法输出跨平台换行

OutputStreaWriter:

是从字符流到字节流的桥梁:使用指定的charset将其解码为字节,它使用的字符集可以是由名称指定,

也可以被明确指定,或者可以接受平台默认的字符集

              字节流常用方法

FileInputStream,BufferedInputStream:

  • int read():读取一个字节

  • int read(byte[]b):读取一个字节数组

  • void close:释放文件(关流)

FileOutputStream、BufferedOutputStream:

  • void write(int b):写入一个字节

  • void write(byte[]b):写入一个字节数组

  • void write(byte[]b,int off(开始位置),int len(个数)):写入一个字节数组,从off开始,写入len个

  • void close:释放文件(关流)

ObjectInputStream:

  • Object readObject():读取一个对象

  • void close:释放文件(关流)

ObjectOutputStream:

  • void writeObject(Object obj):写入一个对象

  • void close:释放文件(关流)

               字符流常用方法

FileReader、BufferedReader、InputStreamReader:

  • int read():一次读取一个字符

  • int read(char[]char):一次读取一个字符数组

BufferedReader特有方法:

  • String readLine():读取一整行

FileWriter、BufferedWriter、OutputStreamWriter:

  • void write():写入一个字符

  • void write(char[]char):写入一个字符数组

  • void write(char[]char,int off(开始位置),int len(个数)):写入一个数组的一部分,开始位置off,写入个数len

  • void write(String str):写一个字符串

  • void write(String str,off(开始位置),len(个数)):写一个字符串一部分,开始位置off,写入个数len

  • void flush():刷新流

  • void close():释放文件

BufferedWriter特有方法:

  • void newLine:跨平台通用换行

Properties集合与Io流集合的方法:

  • void load(Reaner reader):将字符输入流中的数据加载到Properties对象中

  • void store(Writer writer,String comments):将Properties集合中的数据存入字符输出流

              注意事项

  • flush():

  刷新流,之后还可以继续写数据

  • close():

  关闭流,释放资源,但是关闭之前会先写出数据.一旦关闭,就不能再写数据了

  • 关流操作应定要放在try-catch-finally中的finally中:

    • 被finally控制的语句一定会被执行,不管有没有异常,也不管异常有没有被捕获

    • 即使finally中包含continue,break,return,try块结束后,finally块也依旧会执行

  • 使用字节输出流注意事项:

    • 如果文件不存在就创建

    • 写整数时,实际写出的是整数对应码表的字母

    • 使用完必须释放资源

    • 表示文件的路径名称必须存在

  • 使用字符输出(写出)流注意事项:

    • 创建字符输出流对象时如果文件不存在就创建,存在就清空

    • 写数据时:

      • 写int就是写的ASCLL码表中对应的字节

      • 写字符串就是将字符串原样输出

    • 必须释放资源

  • 使用字符流(输入)读取数据注意事项:

    • 文件必须要存在

    • 必须释放资源

  • 对象操作流注意事项:

    • 如果想要这个类能被序列化,那么这个类必须实现一个接口Serializable

    • Serializable是一个标记接口,实现给接口不需要重写任何方法

    • 静态成员不加transient关键字都会被序列化

    • serialVersionUID 指定序列号,可以避免javabean修改,造成序列号改变运行时候出错

  • 数据读取末尾的输出标记:

    • 字符,字节读取到文件结尾会返回-1

    • 读取一整行到文件末尾会返回null

    • 读取对象到末尾会报EOFException

  • File[]listFiles()注意点:

    • File指向不存在的,返回null

    • 存在的是文件:返回null

    • 存在的是文件夹正常输出,如果是空文件夹,返回长度为0的File数组

    • 权限问题没有访问权限,返回null

    注意:返回为null的情况,可以有效避免遍历返回数组时候出现运行时异常

Io流阶段大总结的更多相关文章

  1. Java-使用IO流对大文件进行分割和分割后的合并

    有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...

  2. Java中使用IO流实现大文件的分裂与合并

    文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分 ...

  3. IO流大总结

    - - - - - - - - - - - - - - - 写在前面 - - - - - - - - - - - - - - - 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过 ...

  4. 基于JavaSE阶段的IO流详解

    1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...

  5. 大数据之路week04--day06(I/O流阶段一 之异常)

    从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...

  6. Java第三阶段学习(二、IO流--------递归,字节流Stream)

    一.递归 定义:指方法在方法内调用自己 适用于方法的运算主体不变,但运行的时候,参与运算的方法参数会变化注意:一定要给递归一个出口,否则内存溢出 练习题1:使用递归打印文件夹中所有的文件,包含子目录中 ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_1_使用Properties集合存储数据,遍历取出集合中的数据

    map下面的实现类叫做Hashtable Properties是唯一和IO流相结合的 讲解 代码

  8. 对于IO流的个人理解

    Samuel 2018-04-21 在这之前,我给你们构造这样一个生活用水的场景: 人们日常生活需要生活用水,那么,水从哪里来呢? 大家都学过初中的物理常识,水在地表,通过蒸发,变成水蒸气去到空中,在 ...

  9. Java中常见的IO流及其使用

    Java中IO流分成两大类,一种是输入流.全部的输入流都直接或间接继承自InputStream抽象类,输入流作为数据的来源.我们能够通过输入流的read方法读取字节数据.还有一种是输出流,全部的输出流 ...

随机推荐

  1. Django-DRF框架

    一.RESTfull设计风格 1.什么是RESTfull? 1)REST:即Representational State Transfer的缩写.维基百科称其为"具象状态传输",国 ...

  2. 从TFS到git的持续集成之路

    前言 公司目前使用TFS,由于TFS不灵活不能很好的持续集成,且给测试造成很大重的负担,所以近期准备迁移到git上 目标 解决项目运转的瓶颈(版本太多,导致测试跟不上,需引入自动化测试) 过程 主线分 ...

  3. 第3.6节 Python字符串基础知识

    一. 引言 前面第二章已经接单介绍了字符串,本来计划讲完列表解析和字典解析再来精讲字符串的内容,但发现要讲列表解析和字典解析需要介绍迭代器和生成器,这个概念比较复杂,老猿还需要复习和验证一下才能完全掌 ...

  4. PyQt(Python+Qt)学习随笔:使用实例方法赋值方式捕获事件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<第15.17节 PyQt(Python+ ...

  5. Shell命令和流程控制[linux常用命令的使用]

    在shell脚本中使用三类命令: unix命令 概念:管道.重定向.backtick 流程控制 1 unix命令 echo "some text":在屏幕上输出信息 ls:文件列表 ...

  6. Flask flask-migrate 数据库迁移

    简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用: ...

  7. CSS绘制正五角星原理(数学模型)

    尽管网上有很多CSS绘制五角星的代码案例,但是对于初学者来说可以拿来移植使用,但是在不明白其原理的情况下,进行修改移植就比较困难了.譬如想要将五角星尺寸进行缩小或者放大等设计,就需要对原代码相关数据进 ...

  8. 大白话详解大数据hive知识点,老刘真的很用心(2)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 1. hive知识点(2) 第12点:hive分桶表 hive知识点主要偏实践, ...

  9. 恋爱话术库撩妹至尊VIP版

    本软件来自互联网,解锁永久至尊VIP 是一款教你撩妹密语软件.和女生聊天没有话题? 不知道怎么逗乐女生? 女生生气了不会哄? 不知道怎么让女生愿意跟你聊下去? 不知道女生对你有没有意思? 遇到不知道怎 ...

  10. ant design 中实现表格头部可删除和添加

    我是用antd pro做一个项目.有一个小需求是表格头部栏可操作.具体是表头的每一项都带一个"x"按钮,当不想展示这一栏的时候,直接点"x",这一栏就不展示了. ...