➤ Java 输入输出IO流 全部导航

文章目录

  • 节点流和处理流
  • BufferedReader
  • BufferedWriter
  • Bufferd拷贝
  • BufferedInputStream/BufferedOutputStream

节点流和处理流

  • 数据源就是存放数据的地方,可以是 文件、数组 等等;

    • 节点流是比较底层的,直接操作二进制数据
  • 包装流(处理流)是将节点流给包装了起来,更加灵活(相当于任意节点流,任意数据源都可)

    BufferedReader里的Reader方法相当于把FileInputStream、FileReader等等给包装了起来,涵盖这些方法,可以是任意一个节点流(只要是Reader的子类就可以)

       同理 BufferedWriter也一样 (装饰器模式)
    

节点流和处理流一览:


Reader是抽象父类,而FileInputStream、FileReader等等是实现方法的子类(节点流);BufferedReader是继承Reader的属性,然后把节点流给封装扩展起来,使用更便捷,不用区分文件、数组、字符等等。

  • BufferedReader和BufferedWriter属于字符流,都是按字符来读取数据的;
  • 真正工作的其实还是节点流而不是处理流,处理流只是做了一个封装;
  • 关闭处理流时,只需关闭最外层流(处理流)即可;

BufferedReader

  • 使用BufferReader读取文本文件,并显示在控制台;

使用 readLine() 按行读取:

public static void main(String[] args) throws Exception {String filePath = "d:\\HelloWorld.txt" ;//自行创建编辑//创建BufferedReader对象BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));//读取String line;//按行读取,效率高/*说明:1.bufferedReader.readLine() 按行读取2.返回null时,表示文件读取完毕*/while((line = bufferedReader.readLine()) != null){System.out.println(line);}//关闭流,只需关闭BufferedReader,因为底层的节点流会自动关闭bufferedReader.close();
}

BufferedWriter

public static void main(String[] args) throws IOException {String filePath = "d:\\note.txt";//创建空白文件//创建BufferedWriter对象BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));//覆盖写入bufferedWriter.write("Hello!");               //需要追加就FileWriter(filePath,true)//插入一个和系统相关的换行bufferedWriter.newLine();bufferedWriter.write("Java!");bufferedWriter.newLine();bufferedWriter.write("祝你开心每一天~");//关闭外层流即可bufferedWriter.close();
}

Bufferd拷贝

public static void main(String[] args) throws Exception {/*说明:1.BufferedReader和BufferedWriter是安装字符操作2.不要去操作二进制文件,可能会造成损坏(例如音视频、doc、pdf)*/String srcFilePath = "d:\\HelloWorld.txt";//提前创建String destFilePath = "d:\\hello.txt";//目标文件BufferedReader bufferedReader =null;BufferedWriter bufferedWriter =null;bufferedReader = new BufferedReader(new FileReader(srcFilePath));bufferedWriter = new BufferedWriter(new FileWriter(destFilePath));String line;while((line=bufferedReader.readLine())!=null) {bufferedWriter.write(line);bufferedWriter.newLine();}System.out.println("拷贝完毕");//关闭资源if(bufferedReader!=null) bufferedWriter.close();if(bufferedWriter!=null) bufferedWriter.close();
}

既然 BufferedReader/BufferedWriter 不能操作二进制文件,
那对于二进制文件,该采用什么方法呢?

BufferedInputStream/BufferedOutputStream

  • BufferedInputStream 是字节流 ,实现缓冲的输出流,可以将多个字节写入底层输出流中,而不必对每次字节写入调用底层系统。

音乐、视频的拷贝:

/*
演示使用BufferedInputStream和BufferedOutputStream拷贝*/
public static void main(String[] args) throws Exception{String srcFilePath = "d:\\蜘蛛侠.jpg";String destFilePath = "d:\\spiderman.jpg";//创建BufferedInputStream和BufferedOutputStream对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFilePath));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFilePath));//循环读取文件,并写入到destFilePath中byte[] buff = new byte[1024];int readLen = 0;//当返回-1时,表示文件读取完毕while((readLen = bis.read(buff))!=-1){bos.write(buff,0,readLen);}//关闭外层的处理流即可bis.close();bos.close();

字节流不仅仅可以操作二进制文件,还可以操作文本文件

【Java】IO流 - 节点流和处理流【Buffered】相关推荐

  1. java io 缓冲流_记忆系列-Java IO的缓存输入输出流(高效流)

    2019-09-02今天是周一,应该是学校升国旗开学典礼的一天吧~ 然而垃圾的我还是没有找到工作,大专狗是真的没用~简历也不会看你的呀~ 在之前我自己也mark了字节和字符的流,但是呢读取数据量比较大 ...

  2. java.io对象读写_java _io_对象流,能够保存基本数据类型和对象

    transient:该数据不需要序列化,数据透明(输出显示null),private transient String name; //写出后读取,读取的数徐与写出保持一致 public class ...

  3. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类

    目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...

  4. 酱油的笔记18:JAVA IO流

    输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内存)中.将持久化的文件数据加载到内存中 输出:将程序(内存)数据输出到磁盘.U盘等存储设备中 Java 的 IO 流主要包括输入流和输出流两种 ...

  5. JAVA~~IO流和文件

    ​​​​​​​​ Io流的分类 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Read). 从内存中出来,叫做输出(Outpu ...

  6. Java IO流大闯关--IO流的常用实现类

    这个系列的博客主要是对Java高级编程中IO流相关的知识点做一个梳理,内容主要包括File类.IO流原理及流的分类.文件流.缓冲流.转换流.标准输入输出流.打印流.数据流.对象流.随机存取文件流.NI ...

  7. java io流拒绝访问_JAVA IO流 - 张宏良的个人空间 - OSCHINA - 中文开源技术交流社区...

    IO流 一.File类的使用 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身 ...

  8. Java IO 之 介质流

    2019独角兽企业重金招聘Python工程师标准>>> 自己工作虽有将近三年了,也算得上是一个程序老手了,但对IO这块一直一知半解,以至于每次写IO相关的代码时,总不能随心所欲的写出 ...

  9. (java)IO流对象(六)集合Properties类、序列化流、反序列化流、打印流

    [Properties特点] /** 集合对象Properties类特点:* 1. 继承Hashtable,实现Map接口* 2. 该集合无泛型,键值都是字符串* 3. 键值可以存储到集合中,也可以存 ...

  10. Java IO流的“四大家族”

    1. IO流的概述 理论部分 简单概括就是文件的输入与输出. 磁盘中文件的东西放到内存中的这个过程称为输入(Input)或称读(read),由于这个输入的过程会有数据的流动,就有了输入流(InputS ...

最新文章

  1. chrome安装或者重装 【windows】
  2. python爬虫用多线程还是多进程_python爬虫之多线程、多进程爬虫
  3. 【转】三五个人十来条枪 如何走出软件作坊成为开发正规军
  4. arduino openmv 显示图像_6 个芯片打造复古经典计算机:215 色显示,能编程能玩小游戏...
  5. python找图片不同_用openCV和Python 实现图片对比,并标识出不同点的方式
  6. 对于Neural ODE的小研究
  7. C++禁止隐式转换之explicit用法
  8. 计算机网络技术在教学中的,精选:浅析计算机网络技术在教育教学中的运用原稿...
  9. 网件刷breed_斐讯K2刷不死breed加padavan华硕固件教程
  10. 增值税普通发票冲红方法
  11. 基于单目视觉的平面目标定位和坐标测量 (上) - 坐标系和成像模型
  12. 科学计算机calc在哪儿,‎App Store 上的“NCalc科学计算器+”
  13. tl-wr842n服务器未响应,TL-WR842N路由器怎么重启? 重启路由器的技巧
  14. python鼠标键盘事件代码_Python鼠标键盘事件
  15. 笔记本电脑开机白屏怎么处理
  16. 360实习之--技术基础H卷
  17. IntelliJ IDEA pycharm webstorm 激活
  18. 1.6.太极平台:开发自己的后台系统首页
  19. 关于Java Web项目的技术点探讨
  20. buuctf-[BSidesCF 2020]Had a bad day(小宇特详解)

热门文章

  1. 淘宝/天猫获取淘宝直播分类id接口 API 返回值说明
  2. 成功解决numpy.ndarray size changed
  3. 视频用txt文件播放物联网
  4. mc服务器物品展示,我的世界物品展示框怎么做
  5. 棋盘覆盖问题——详解(C++)
  6. TCP粘包问题以及解决方法
  7. 解决Win7的一个毛病——睡眠失效(只关闭显示器,不关主机)
  8. 别再问什么是数据库分库分表了,看这里!
  9. 微信公众号开发 (1) 微信接入认证成为开发者
  10. 新墨斯智能鞋就是您的足底按摩师