热门标签 | 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();}}}
}


推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • andr ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
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社区 版权所有