热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IO流——字符流BufferedReader/BufferedWriter进行文件读写

目录节点流、处理流读文件:BufferedReader的使用写文件:BufferedWriter的使用节点流处理流节点流和处理流的区别和联系字符流Buf

目录

  • 节点流、处理流
    • 读文件:BufferedReader 的使用
    • 写文件:BufferedWriter 的使用
      • 节点流
      • 处理流
      • 节点流和处理流的区别和联系
      • 字符流 BufferedReader / BufferedWriter 拷贝文本文件练习
        • 字符流 BufferedReader / BufferedWriter 用来拷贝文本文件,拷贝二进制文件(图片、音乐、视频、压缩包等都是二进制文件)会出错!!!
      • 字节流 BufferedOutputStream / BufferedInputStream 拷贝二进制文件
        • 字节流既可以拷贝二进制文件,也可以拷贝文本文件


节点流、处理流

在这里插入图片描述

读文件:BufferedReader 的使用


package day06.reader;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;/*** @Author: Gin* @Description: 演示 BufferedReader 的使用* @Modified By: Gin* @Date: Created in 9:07 2021/9/3*/
public class Demo {public static void main(String[] args) throws IOException {String filePath = "E:\\news3.txt";BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));String line; // 按行读取,效率高// 1. BufferedReader.readLine() 是按行读取// 2. 当读取到 null 时,表示读取完成while((line = bufferedReader.readLine()) != null){System.out.println(line);}// 关闭流,这里只需要关闭 BufferedReader,因为底层会自动关闭节点流/*public void close() throws IOException {synchronized (lock) {if (in == null)return;try {in.close(); // 这里的 in,就是我们传入的 new FileReader(filePath)} finally {in = null;cb = null;}}}*/bufferedReader.close();}
}

写文件:BufferedWriter 的使用


package day06.reader;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;/*** @Author: Gin* @Description:* @Modified By: Gin* @Date: Created in 9:19 2021/9/3*/
public class Demo2 {public static void main(String[] args) throws IOException {String filePath = "E:\\news4.txt";// 1. new FileWriter(filePath, true):表示追加写// 2. new FileWriter(filePath):表示覆盖写BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, true));bufferedWriter.write("Gin");// 插入一个换行bufferedWriter.newLine();bufferedWriter.write("Vodka");// 插入一个换行bufferedWriter.newLine();bufferedWriter.write("Vermouth");// 插入一个换行bufferedWriter.newLine();bufferedWriter.close();}
}

在这里插入图片描述

节点流

节点流可以从一个特定的数据源读写数据,如 FileReaderFileWriter。节点流是比较底层的流,直接操作数据源。例:

在这里插入图片描述

处理流

处理流(也叫包装流),是 “ 连接 ” 在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,也更加灵活,如 BufferedReaderBufferedWriter
在这里插入图片描述

  • 为了使处理流的功能更加强大,在处理流(包装流)的底层对 节点流 进行了封装:

  • BufferedReader 为例: BufferedReader 类中,有属性 Reader ,即:可以封装一个节点流,只要是 Reader 的子类即可,而 Reader 的子类有很多,这样一来就大大加强了流的功能。【这种设计模式称之为修饰器模式

  • 在这里插入图片描述

  • 在这里插入图片描述

  • BufferedWriter 同理

  • 在这里插入图片描述

  • 在这里插入图片描述


节点流和处理流的区别和联系


  1. 节点流是 底层流 / 低级流 ,直接跟数据源相接。
  2. 处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
  3. 处理流(包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连 【模拟修饰器设计模式】
  4. 模拟修饰器设计模式

字符流 BufferedReader / BufferedWriter 拷贝文本文件练习


字符流 BufferedReader / BufferedWriter 用来拷贝文本文件,拷贝二进制文件(图片、音乐、视频、压缩包等都是二进制文件)会出错!!!


package day06.reader;import java.io.*;/*** @Author: Gin* @Description: 利用处理流实现文件拷贝* @Modified By: Gin* @Date: Created in 9:31 2021/9/3*/
public class CopyTest {public static void main(String[] args) {// 1. BufferedReader 和 BufferedWriter 是按照字符操作的// 2. 不要去操作二进制文件,可能造成文件损坏String srcFile = "E:\\imgs";String destFile = "E:\\imgs2";BufferedReader br = null;BufferedWriter bw = null;try {br = new BufferedReader(new FileReader(srcFile));bw = new BufferedWriter(new FileWriter(destFile));String line;while ((line = br.readLine()) != null){bw.write(line);bw.newLine();}System.out.println("拷贝完毕!");} catch (IOException e) {e.printStackTrace();} finally {try {if(br != null){br.close();}if(bw != null){bw.close();}} catch (IOException e) {e.printStackTrace();}}}
}

字节流 BufferedOutputStream / BufferedInputStream 拷贝二进制文件


字节流既可以拷贝二进制文件,也可以拷贝文本文件


package day06.reader;import java.io.*;/*** @Author: Gin* @Description: BufferedOutputStream / BufferedInputStream 拷贝二进制文件* @Modified By: Gin* @Date: Created in 9:50 2021/9/3*/
public class CopyTest2 {public static void main(String[] args) {String srcFile = "E:\\HBuilderX.3.1.22.20210709.zip";String destFile = "E:\\HBuilderX.3.1.22.20210709-2.zip";BufferedInputStream bis = null;BufferedOutputStream bos = null;try {bis = new BufferedInputStream(new FileInputStream(srcFile));bos = new BufferedOutputStream(new FileOutputStream(destFile));byte[] buf = new byte[1024];int readLen;while((readLen = bis.read(buf)) != -1){bos.write(buf, 0, readLen);}System.out.println("拷贝完成!");} catch (IOException e) {e.printStackTrace();} finally {try{if(bis != null){bis.close();}if(bos != null){bos.close();}}catch(IOException e){e.printStackTrace();}}}
}


推荐阅读
  • 本文介绍了两种使用Java发送短信的方法:利用第三方平台的HTTP请求和通过硬件设备短信猫。重点讲解了如何通过Java代码配置和使用短信猫发送短信的过程,包括必要的编码转换、串口操作及短信发送的核心逻辑。 ... [详细]
  • 在Java应用程序开发过程中,FTP协议被广泛用于文件的上传和下载操作。本文通过Jakarta Commons Net库中的FTPClient类,详细介绍如何实现文件的上传和下载功能。 ... [详细]
  • Java实现文本到图片转换,支持自动换行、字体自定义及图像优化
    本文详细介绍了如何使用Java实现将文本转换为图片的功能,包括自动换行、自定义字体加载、抗锯齿优化以及图片压缩等技术细节。 ... [详细]
  • 本文详细介绍了Java中的`ByteArrayInputStream`和`ByteArrayOutputStream`,包括它们的基本概念、工作原理及具体应用实例。`ByteArrayInputStream`用于处理内存中的字节数组,而`ByteArrayOutputStream`则用于将数据写入内存中的字节数组。 ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • ▶书中第四章部分程序,包括在加上自己补充的代码,有边权有向图的邻接矩阵,FloydWarshall算法可能含负环的有边权有向图任意两点之间的最短路径●有边权有向图的邻接矩阵1 ... [详细]
  • 本文介绍了两种在Android设备上获取MAC地址的有效方法,包括通过Wi-Fi连接和使用移动数据流量的情况。第一种方法依赖于Wi-Fi连接来获取MAC地址,而第二种方法则无需Wi-Fi,直接通过网络接口获取。 ... [详细]
  • 最近同事提了一个需求过来,他觉得项目对于第三方日志记录的太多了,只想记录一些业务相关的日志减少对于框架日志的显示。具体要求就是对于框架日志只显示warn等级以上的,而业务日志显示info等级以上 ... [详细]
  • 本文探讨了如何利用Java PDFBox库填写PDF表单,并将其正确地附加到PDDocument中,同时确保表单字段的唯一性。 ... [详细]
  • 1Authenticator简介1.1层次结构图1.2作用职责是验证用户帐号,是ShiroAPI中身份验证核心的入口点;接口中声明的authenticate方法就是用来实现认证逻辑 ... [详细]
  • 利用Python实现自动化群发邮件
    本文详细介绍如何使用Python语言来实现邮件的自动群发功能,适合希望提高工作效率的技术爱好者和开发者。 ... [详细]
  • Android中解析XML文件的实践指南
    本文详细介绍了在Android应用开发中解析XML文件的方法,包括从本地文件和网络资源获取XML文件的不同途径,以及使用DOM、SAX和PULL三种解析方式的具体实现。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
  • 本文旨在介绍在iOS平台进行直播技术开发前的准备工作,重点讲解AVFoundation框架的基本概念和使用方法。通过对AVFoundation的深入理解,开发者能够更好地掌握直播应用中的音视频处理技巧。 ... [详细]
author-avatar
邵世以_806
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有