深入理解Java IO流:字符流

深入理解Java IO流:字符流

引言
在Java中,IO(输入/输出)操作是程序与外部世界交互的重要方式。
其中,File类是进行文件操作的基础,而字节流和字符流则是数据传输的两种主要方式。
本文将深入探讨这些概念及其应用。

一、字节流读取中文问题

  1. 字节流是万能流,更侧重于文件复制,但是尽量不要边读边看
  2. 原因:
    • UTF-8:一个汉字占3个字节
    • GBK:一个中文占2个字节

如果按照字节读取,每次读取的字节没有构成一个汉字的字节数,就直接输出,汉字是显示不了的

  1. 解决方法:
    • 将文本文档中的内容,按照字符去操作

二、FileReader 字符输入流

字符流专门去操作文本文档,但是复制操作不要用字符流
  1. 概述:
    • 字符输入流: Reader 抽象类
      • 子类:FileReader
  2. 作用:
    • 将文本文档中的内容读取到内存中来
  3. 构造:
    • FileReader(File file);
    • FileReader(String path);
  4. 方法:
    • int read() 一次读取一个字符,返回的是读取字符对应的int值
    • int read(char[] cbuf) 一次读取一个字符数组,返回的是读取个数
    • int read(char[] cbuf,int off ,int len ) 一次读取一个字符数组一部分,返回的是读取个数
      • cbuf :读取的数组
      • off :那个开始读
      • len :读多少个
    • void close()
  5. 测试
    @Testpublic void demo1() throws IOException {FileReader fileReader = new FileReader("testfile.txt");int i;while (((i = fileReader.read()) != -1)) {System.out.println((char) i);}fileReader.close();}@Testpublic void demo2() throws IOException {FileReader fileReader = new FileReader("testfile.txt");int i;char[] chars = new char[2];while (((i = fileReader.read(chars)) != -1)) {System.out.println(new String(chars, 0, i));}fileReader.close();}

在这里插入图片描述
在这里插入图片描述


三、FileReader 字符输出流

  1. 概述:
    • 字符输入流: Writer 抽象类
      • 子类:FileWriter
  2. 作用:
    • 将数据写到文件中
  3. 构造:
    • FileWriter (File file);
    • FileWriter (String fileName);
    • FileWriter (String fileName,boolean append); 追加,续写
  4. 方法:
    • int write()
    • int write(char[] cbuf)
    • int write(char[] cbuf,int off ,int len )
    • int write(String str)
    • void close()
  5. 小细节
    • FileWriter 底层自带一个缓冲区,我们写的数据会先保存到缓冲区中,所以我们需要将缓冲区中的数据刷到文件中
    • flush():将缓冲区中的数据刷到文件中,后续流对象还能继续使用
    • close():先刷新后关闭,后续流对象不能使用了
  6. 测试
	@Testpublic void demo3() throws IOException {FileWriter fileWriter = new FileWriter("testfile.txt");fileWriter.write("干就完了,兄弟们!\n");fileWriter.write("奥利给\n");fileWriter.flush();fileWriter.close();}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis 神秘大陆】004 高可用集群

四、Redis 高可用和集群 当你发现这些内容对你有帮助时,为了支持我的工作,不妨给一个免费的⭐Star,这将是对我最大的鼓励!感谢你的陪伴与支持!一起在技术的路上共同成长吧!点击链接:GitHub | G…

算法总结篇 —— dfs(搜索、递归、回溯)

有些事情本来很遥远,你争取,它就会离你越来越近 概念 名词解释如何理解递归 dfs 回溯类问题蓝桥杯——飞机降落 dfs 迷宫搜索类问题蓝桥杯——岛屿个数 概念 名词解释 递归是指在一个函数的定义中调用自身的过程,有些复杂问题可以划分为多…

IO同步与异步

公众号:I/O异步与同步 我们的程序,如果要对I/O设备进行操作,比如通过一个socket发送数据,文件的读写,是怎么实现的呢? 要知道,为了保证系统安全以及抽象化(避免每个进程都需要对IO设…

c++的学习之路:26、AVL树

摘要 本章主要是说一下AVL树的实现,这里说的是插入的底层原理 目录 摘要 一、原理 二、四种旋转 1、左单旋 2、右单旋 3、左右双旋 4、右左双旋 三、代码实现 1、节点创建 2、插入 3、旋转 4、判断是否平衡 5、测试 四、代码 一、原理 前面说了搜索…

面试经典150题——H指数

面试经典150题 day11 题目来源我的题解方法一 排序从后往前遍历方法二 计数排序后缀和方法三 排序从左到右遍历 题目来源 力扣每日一题;题序:274 我的题解 方法一 排序从后往前遍历 先将数组升序排序,然后h从n到0开始遍历,计算…

为啥转化为可编辑面片后有这么多点和线

可以删一下 按住alt按移除可以删掉 选择你要删的那些线 按住alt点移除

一个typescript 5 + rollup 4 打包lib模板仓库实现

前言 昨天在写点什么东西的时候,发现有些逻辑可以搞成一个 npm 模块。 找了下看看,有没有什么好用现成模板用于开发。。发现并没有; 那有需求就解决需求。。 需求 基于当前的流行技术栈选型(rollup 4.x typescript 5.x)提供一个最小化模…

eBay、亚马逊自养号测评如何避免风控账号关联选择合适网络IP环境

在自养号下单中选择适合的网络环境至关重要。经过多次实践与测试,积累了大量的经验,希望能够与大家分享,帮助大家避开陷阱,顺利前行。 市面上的网络环境种类繁多,从纯IP类的Luminati、Rola,到纯环境类的VM…

编写Spark独立应用程序

执行本文之前,先搭建好spark的开发环境,我目前只搭建了standalone模式,参考链接 : Spark Standalone模式部署-CSDN博客 1. 安装sbt 1)下载sbt 网址:https://www.scala-sbt.org/download.html &#xff0c…

【云原生 • Docker】 ELK 8.4.3 docker 保姆级安装部署详细步骤

文章目录 ELK简介二、版本说明三、安装部署3.1 创建docker网络3.2 Elasticsearch拉取docker镜像,版本:8.4.3第一次执行docker脚本可以看到控制台的信息,找到这个信息并保存下来创建Elasticsearch挂载目录给创建的文件夹授权将容器内的文件复制到主机上删除容器修改docker脚本…

【GPTs分享】GPTs分享之Image Recreate | img2img​

简介 该GPT是一个专门用于图像编辑、重建和合并的工具。它通过详细的自动图像描述和生成,帮助用户从源图像中重现或修改图像。此工具设计用于为视障用户提供图像内容的详细描述,并生成全新的图像,以满足特定的视觉需求。 主要功能 \1. 图像…

Python基础:【练手小实验系列】列表、元组、字典、集合

文章目录 题目练习题1: 列表合并和排序练习题2: 元组元素计数练习题3: 字典键值互换练习题4: 集合的交集与并集参考答案练习题1: 列表合并和排序练习题2: 元组元素计数练习题3: 字典键值互换练习题4: 集合的交集与并集题目 练习题1: 列表合并和排序 题目描述: 给定两个已经排…

webpack源码分析——enhanced-resolve库之cdUp函数

一、 cdUp函数 函数功能 该函数寻找上层目录,每次调用函数时对输入的路径进行一次寻找上级目录。如果没有找到返回null 二、函数分析 传入的directory判读是否为‘/’如果是直接返回nullif (directory "/") return null;获取‘/’和‘\’在directory 中…

Unity开发holoLens2应用时的ProjectSettings配置

正确的进行Unity工程配置,才能进行后续的【发布】和【部署】操作… 本案例开发环境说明: Unity2021.3.18Win10VS2022HoloLens2 一、平台设置 二、Quality画面质量设置 三、Player玩家设置 四、XR-Plug设置 五、环境测试 导入一个官方demo&#xff0c…

基于C语言的贪吃蛇实现

头文件 #pragma once #include<stdio.h> #include<Windows.h> #include<stdbool.h> #include<locale.h> #include<time.h> #define KEY_PRESS(vk) ( (GetAsyncKeyState(vk) & 1) ? 1 : 0) #define POS_X 24 #define POS_Y 5 #define FOOD …

网址分类-杂项

网址分类 Python可视化库matplotlibplotnineseaborn 科学计算库numpy scipy数据分析库pandas 人工智能opencvkeras 工具网站电子工具 Python 可视化库 matplotlib matplotlib官网 plotnine plotnine seaborn seaborn 科学计算库 numpy numpy官网 scipy scipy官网 …

ORAN C平面 Section Extension 23

ORAN C平面Section扩展23用于任意symbol模式的调制压缩参数。此section扩展允许为一个或多个“SymPrbPatterns”指定多组“mcScaleReMask、csf和mcScaleOffset”值。“SymPrbPattern”用于指定一组PRB&#xff0c;这些PRB可以跨越使用prbPattern指定的整个PRB范围&#xff08;频…

重生奇迹mu坐骑怎么升级

重生奇迹mu坐骑怎么升级 1、前期&#xff0c;都是主线任务&#xff0c;我们必须要跟着主线任务走&#xff0c;前面的话升级一次需要的经验很少的&#xff0c;一天下来可以升级100级是轻轻松松的&#xff0c;主线任务是比较多的&#xff0c;我们跟着任务一直做差不多可以到150级…

dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

计算机组成原理【CO】Ch7 I/O大题

目录 I/O大题解题方法 I/O接口 各种I/O方式的特点 I/O端口编址 程序查询方式 中断控制方式 DMA控制方式 程序中断的工作流程 程序中断的工作流程 DMA方式和中断方式的区别 I/O大题解题方法 CPU 程序查询中断DMA I/O接口的类型 按字传输&#xff1a;每次传输一个字 程…