学习javaEE的日子 Day36 字符流

Day36

1.字符流

应用场景:操作纯文本数据

注意:字符流 = 字节流+编译器

编译器:可以识别中文字符和非中文字符,非中文字符获取1个字节(一个字节=一个字符),编译器会根据编码格式获取中文字符对应的字节数(GBK获取两个字节,UTF-8获取三个字节)

abstract class Reader – 字符输入流的基类(抽象类)

abstract class Writer – 字符输出流的基类(抽象类)

class InputStreamReader extends Reader – 字符输入转换流

class OutputStreamWriter extends Writer – 字符输出转换流

特点:将字节流转换为字符流,字符转换流是字节流和字符流的桥梁

class FileReader extends InputStreamReader – 文件字符输入流

class FileWriter extends OutputStreamWriter – 文件字符输出流

class BufferedReader extends Reader – 带缓冲区的字符输入流

class BufferedWriter extends Writer – 带缓冲区的字符输出流

默认缓冲区:8192字符 – new char[8192]

在这里插入图片描述

1.1 利用 字符输出转换流 向文件写入数据OutputStreamWriter

1)不处理异常的方式

2)文件存在的情况

3)文件不存在的情况

经验:所有的输出流,文件不存在的情况都会创建文件

public class Test01 {public static void main(String[] args) throws IOException {//1.创建流对象(将文件字节输出流 转换为 字符输出转换流)OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("io.txt"));//2.写入数据//osw.write(97);//写入码值//char[] cs = {'1','2','3','a','b','c','我','爱','你'};//osw.write(cs);//写入字符数组//osw.write(cs, 3, 4);//写入字符数组,偏移量,写入长度//osw.write("123abc我爱你");//字符串osw.write("123abc我爱你", 3, 4);//写入字符串,偏移量,写入长度//3.关闭资源osw.close();}
}
  1. 文件末尾追加

经验:考虑基础流的构造方法

注意:使用字符转换流最好加上编码格式!!!!!!!

public class Test02 {public static void main(String[] args) throws IOException {//1.创建流对象(将文件字节输出流 转换为 字符输出转换流)OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("io.txt",true),"UTF-8");//2.写入数据osw.write("123abc我爱你");//3.关闭资源osw.close();		}
}

1.2 利用 字符输入转换流 读取文件里的数据InputStreamReader

  1. 不处理异常

  2. 文件存在

  3. 文件不存在

经验:所有的输入流,在文件不存在时都会报错

public class Test05 {public static void main(String[] args) throws IOException {//1.创建流对象InputStreamReader isr = new InputStreamReader(new FileInputStream("io.txt"));//2.读取数据//int read;//while((read = isr.read()) != -1){//	System.out.println((char)read);//}//2.读取数据//isr.read(cs):读入cs数组长度的字符,将字符数据存入到数组中,并返回读取到的有效字节数,如果读取到文件末尾,则返回-1char[] cs = new char[1024];int len;while((len = isr.read(cs)) != -1){System.out.println(new String(cs, 0, len));}       //3.关闭资源isr.close();}
}

1.3 拷贝文件

public class Copy {public static void main(String[] args) throws UnsupportedEncodingException, IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("小说.txt"), "GBK");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("copy.txt"), "GBK");char[] cs = new char[1024];int len;while((len = isr.read(cs)) != -1){osw.write(cs, 0, len);}isr.close();osw.close();}
}

1.4 利用 文件字符输出流 向文件写入数据FileWriter

public class Test01 {public static void main(String[] args) throws IOException {//1.创建流对象//FileWriter fw = new FileWriter("io.txt");//1.创建流对象FileWriter fw = new FileWriter("io.txt", true);//2.写入数据fw.write("好好学习");//3.关闭资源fw.close();}
}

1.5 利用 文件字符输入流 读取文件里的数据FileReader

public class Test02 {public static void main(String[] args) throws IOException {//1.创建流对象FileReader fr = new FileReader("io.txt");//2.读取数据char[] cs = new char[1024];int len;while((len = fr.read(cs)) != -1){System.out.println(new String(cs, 0, len));}//3.关闭资源fr.close();}
}

1.6 拷贝文件

public class Copy {public static void main(String[] args) throws IOException {FileReader fr = new FileReader("小说.txt");FileWriter fw = new FileWriter("copy.txt");char[] cs = new char[1024];int len;while((len = fr.read(cs)) != -1){fw.write(cs, 0, len);}fr.close();fw.close();}
}

1.7 利用 带缓冲区的字符输出流 向文件写入数据BufferedWriter

public class Test01 {public static void main(String[] args) throws UnsupportedEncodingException, IOException {//1.创建流对象(文件字节输出流 -> 字符输出转换流 -> 带有缓冲区的字符输出流)//默认缓冲区大小:8192字符//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("io.txt"), "GBK"));//1.创建流对象(文件字节输出流 -> 字符输出转换流 -> 带有缓冲区的字符输出流)+ 末尾追加//默认缓冲区大小:8192字符//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("io.txt",true), "GBK"));//1.创建流对象(文件字符输出流 -> 带缓冲区的字符输出流)//默认缓冲区大小:8192字符//BufferedWriter bw = new BufferedWriter(new FileWriter("io.txt"));//1.创建流对象(文件字符输出流 -> 带缓冲区的字符输出流)+ 末尾追加//默认缓冲区大小:8192字符//BufferedWriter bw = new BufferedWriter(new FileWriter("io.txt",true));//1.创建流对象(文件字符输出流 -> 带缓冲区的字符输出流)+ 末尾追加 //自定义缓冲区大小:2048字符BufferedWriter bw = new BufferedWriter(new FileWriter("io.txt",true),2048);//2.写入数据bw.write("好好学习");//3.关闭资源bw.close();		}
}

1.8 利用 带有缓冲区的字符输入流 读取文件里的数据BufferedReader

public class Test02 {public static void main(String[] args) throws UnsupportedEncodingException, IOException {//1.创建流对象(文件字节输入流 -> 字符输入转换流 -> 带有缓冲区的字符输入流)//默认缓冲区大小:8192字符//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("io.txt"), "GBK"));//1.创建流对象(文件字节输入流 -> 字符输入转换流 -> 带有缓冲区的字符输入流)//默认缓冲区大小:8192字符//BufferedReader br = new BufferedReader(new FileReader("io.txt"));//1.创建流对象(文件字节输入流 -> 字符输入转换流 -> 带有缓冲区的字符输入流)//自定义缓冲区大小:2048字符BufferedReader br = new BufferedReader(new FileReader("io.txt"),2048);//2.读取数据char[] cs = new char[1024];int len;while((len = br.read(cs)) != -1){System.out.println(new String(cs, 0, len));}//3.关闭资源br.close();}
}

1.9 拷贝文件

public class Copy01 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("С˵.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));char[] cs = new char[1024];int len;while((len = br.read(cs)) != -1){bw.write(cs, 0, len);}br.close();bw.close();}
}

另一种方法

public class Copy02 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("小说.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));//		String readLine;
//		while((readLine = br.readLine()) != null){
//			bw.write(readLine);//写一行
//			bw.newLine();//换行
//		}boolean bool = false;String readLine;while((readLine = br.readLine()) != null){//第一行不换行if(bool){bw.newLine();//换行}bw.write(readLine);//写一行bool = true;}br.close();bw.close();}
}

总结

1.InputStreamReader 和 OutputStreamWriter
理解转换流(字节流 -> 字符流)

2.FileReader、FileWriter

3…BufferedReader、BufferedWriter
注意:缓冲区大小-8192字符

4.字符流继承图

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

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

相关文章

企业数智化产品如何设计?

企业数智化,是基于新一代数字与智能技术的各类云服务,通过网络协同、数据智能、连接资源、重组流程、赋能组织,处理交易,执行作业,融入数字经济,推进企业业务创新(研发、生产、营销、服务等&…

媒体邀约采访的分类?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约采访可以根据不同的标准进行分类。以下是一些常见的分类方式: 1. 按照邀约形式: - 电话邀约:通过电话与媒体联系,说明采访或报道…

Gartner 《2024安全和风险管理技术路线图》:高价值技术 DSP 进入广泛部署阶段

近期,Gartner 发布《2024年技术采用路线图:安全与风险管理》(以下简称:《路线图》),该信息图表识别了全球企业正在采用的 44 种与安全相关的技术,并根据采用阶段、部署风险和企业价值进行了映射…

Web 前端 Javascript笔记2

1、数组 为什么需要数组:因为变量只能存储一条数据,但是储存多条数据 数组的声明方式 1、new let a1new Array() console.log(a1) 2、字面量 let a2[1,2,4,"k",true,"zhangsan",11] console.log(a2) 数组里面可以存放不同的数据类…

深入理解go语言中的切片

写在文章开头 从一个Java的开发角度来看,切片我们可以理解为Java中的ArrayList即一种动态数组的实现,本文会从源码的角度对切片进行深入剖析,希望对你有帮助。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java …

Transformer架构实现一

从0-1搭建Transformer架构 架构图 本文主要讲解 1)输入层的词嵌入 2)输入层的位置编码 3)编码层的多头注意力机制 4)编码层的前馈全连接 1)输入层的词嵌入 class Embeddings(nn.Module):"""构建emb…

a == 1 a== 2 a== 3 返回 true ?

1. 前言 下面这道题是 阿里、百度、腾讯 三个大厂都出过的面试题,一个前端同事跳槽面试也被问了这道题 // ? 位置应该怎么写,才能输出 trueconst a ?console.log(a 1 && a 2 && a 3) 看了大厂的面试题会对面试官的精神…

git操作基本命令

Git命令操作: 1、服务器上面有新的修改,pull出现错误操作如下 git stash git pull origin master git stash pop 2、删除本地一个文件test.py,想重新download远程服务器最新的文件 #git checkout test.py 3、查看当前处于哪一个分支 #git …

数码相框-显示JPG图片

LCD控制器会将LCD上的屏幕数据映射在相应的显存位置上。 通过libjpeg把jpg图片解压出来RGB原始数据。 libjpeg是使用c语言实现的读写jpeg文件的库。 使用libjpeg的应用程序是以"scanline"为单位进行图像处理的。 libjpeg解压图片的步骤: libjpeg的使…

【御控物联】物联网平台设备接入-JSON数据格式转化(场景案例四)

文章目录 一、背景二、解决方案三、在线转换工具四、技术资料 一、背景 物联网平台是一种实现设备接入、设备监控、设备管理、数据存储、消息多源转发和数据分析等能力的一体化平台。南向支持连接海量异构(协议多样)设备,实现设备数据云端存…

前端开发攻略---在输入框中输入中文但是还没选中的时候,搜索事件依然存在;中文输入法导致的高频事件。

1、演示 解决前 解决后 2、输入框事件介绍 compositionstart事件在用户开始使用输入法输入时触发。这意味着用户正在进行组合输入,比如在中文输入法中,用户可能正在输入一个多个字符的词语。在这个阶段,输入框的内容可能还没有完全确定&#…

RocketMQ 10 面试题FAQ

RocketMQ 面试FAQ 说说你们公司线上生产环境用的是什么消息中间件? 为什么要使用MQ? 因为项目比较大,做了分布式系统,所有远程服务调用请求都是同步执行经常出问题,所以引入了mq 解耦 系统耦合度降低,没有强依赖…

Testng测试框架(2)-测试用例@Test

测试方法用 Test 进行注释,将类或方法标记为测试的一部分。 Test() public void aFastTest() {System.out.println("Fast test"); }import org.testng.annotations.Test;public class TestExample {Test(description "测试用例1")public void…

如何通过Python向PDF添加文本水印_python给pdf文件加文字水印

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞…

频率传感器信号采集隔离转换模拟信号0-1KHz/0-5KHz/0-10KH转0-2.5V/0-5V/0-10V/0-10mA/0-20mA/4-20mA

主要特性: >> 精度等级&#xff1a;0.2 级 >> 全量程内极高的线性度&#xff08;非线性度<0.1%&#xff09; >> 辅助电源/信号输入/信号输出&#xff1a; 2500VDC 三隔离 >> 辅助电源&#xff1a;5VDC&#xff0c;12VDC&#xff0c;24VDC 等单…

Redis Desktop Manager 中文--强大的Redis数据库管理工具

Redis Desktop Manager&#xff08;简称RDM&#xff09;是一款开源且功能强大的图形化Redis管理工具。它支持Windows、macOS和Linux等多平台&#xff0c;为Redis数据库提供了直观友好的管理界面。通过RDM&#xff0c;用户可以轻松连接多个Redis服务器&#xff0c;管理连接信息&…

【自媒体创作利器】AI白日梦+ChatGPT 三分钟生成爆款短视频

AI白日梦https://brmgo.com/signup?codey5no6idev 引言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI在各个领域都展现出了强大的应用潜力。其中&#xff0c;自然语言处理技术的进步使得智能对话系统得以实现&#xff0c;而ChatGPT作为其中的代表之一…

MyBatis操作数据库(3)

其它查询操作 #{}和${} MyBatis参数赋值有两种方式, 咱们前面使用了#{}进行赋值, 接下来来看两者的区别: #{}和${}的使用 1.先看Integer类型的参数: Select("select username, password, age, gender, phone from userinfo where id #{id}") UserInfo queryByI…

攻防世界---easyRE1

1.下载附件&#xff0c;打开后有两个文件 2.对32查壳 3.对64查壳 4.IDA分析&#xff0c;这里打开之后找到main函数点击main函数后按f5 5.看到了flag----拿去提交发现是对的&#xff0c;这道题是逆向中最简单的一道了 flag{db2f62a36a018bce28e46d976e3f9864}

LeetCode501:二叉搜索树中的众数

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…