245 - 转换流

news/2024/5/14 11:44:02/文章来源:https://blog.csdn.net/zhoulizhengZ/article/details/127388869

1、转换流: InputStreamReader , OutputStreamWriter

【1】转换流作用:将字节流和字符流进行转换

【2】转换流 属于 字节流还是字符流   属于字符流

InputStreamReader  :字节输入流 —> 字符的输入流

OutputStreamWriter  : 字符输出流 —> 字节的输出流

【3】图解: 

输入输出——是相对于程序来说的。

理解:

InputStreamReader ——  把输入方向的字节流转换成输入方向的字符流;

OutputStreamWriter —— 输出方向的字符流转换成输出方向的字节流。

 【4】将输入的字节流转换为输入的字符流,然后完成文件到程序(的查看): 

代码示例:以下代码实现了上图左侧的转换

package test5_;import java.io.*;/*** @Auther: zhoulz* @Description: test5_* @version: 1.0*/
public class Test1 {public static void main(String[] args) throws IOException {//文件---》程序://1.有一个源文件File f = new File("d:\\Test.txt");//2、需要一个输入的字节流接触文件:FileInputStream fis = new FileInputStream(f);//3、加入一个转换流,将字节流转换为字符流:(转换流属于一个处理流)//将字节转换为字符的时候,需要指定一个编码,这个编码跟文件本身的编码格式统一//如果编码格式不统一的话,那么在控制台上展示的效果就会出现乱码//InputStreamReader isr = new InputStreamReader(fis,"utf-8");//换成gbk格式就会出错//如果不指定编码的话,则会(自动)获取程序本身的编码:utf-8,因为提供了这样的一个构造器InputStreamReader isr = new InputStreamReader(fis);//4、开始动作,将文件中内容显示在控制台char[] ch = new char[20];int len = isr.read(ch);while (len != -1){//System.out.println(ch);//System.out.println(len);//将缓冲数组转为字符串在控制台上打印出来System.out.print(new String(ch,0,len)); //注意,不用换行len = isr.read(ch);}//5、关闭流isr.close();}
}

2、转换流:InputStreamReader,OutputStreamWriter

     ——  实现文本文件的复制

代码示例:

package test5_;import java.io.*;/*** @Auther: zhoulz* @Description: test5_* @version: 1.0*/
public class Test2 {public static void main(String[] args) throws IOException {//1、有一个源文件File f1 = new File("d:\\Test.txt");//2、有一个目标文件File f2 = new File("d:\\Demo.txt");//3、输入方向FileInputStream fis = new FileInputStream(f1);InputStreamReader isr = new InputStreamReader(fis,"utf-8");//4、输出方向FileOutputStream fos = new FileOutputStream(f2);OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");//5、开始动作:char[] ch = new char[20];int len = isr.read(ch);while (len != -1){osw.write(ch,0,len);len = isr.read(ch);}//6、关闭流osw.close();isr.close();}
}

3、System类对IO流的支持

【1】System的属性:

System.in  : “标准”输入流。---》默认情况下  从键盘输入

System.out  :“标准”输出流。 ---》默认情况下,输出到控制台。

【2】System.in :“标准”输入流。---> 默认情况下  从键盘输入

代码示例:

package test5_;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;/*** @Auther: zhoulz* @Description: test5_* @version: 1.0*/
public class Test3_System_in {public static void main(String[] args) throws IOException {//得到的是标准的输入流 —> 从键盘输入/*InputStream in = System.in;//调用方法:int n = in.read();//read方法等待键盘的录入,所以这个方法是一个阻塞方法。System.out.println(n);*///以前案例:从键盘录入一个int类型的数据://从上面的代码证明,键盘录入实际上是:System.in//形象的理解:System.in是一根管,这个管怼到键盘上去了,所以你从键盘录入的话,就从这个管到程序中了//Scanner的作用:扫描器:起扫描作用的,扫键盘录入的从这根管出来的数据/*Scanner sc = new Scanner(System.in);int i = sc.nextInt();System.out.println(i);*///既然Scanner是扫描的作用,那就不一定非得扫System.in进来的东西,//还可以扫描其他管的内容,如:Scanner sc = new Scanner(new FileInputStream((new File("d:\\Test.txt"))));//只要下面有东西,就进行输出while (sc.hasNext()){  //用if的话会只读一部分System.out.println(sc.next());}}
}

【3】System.out  :返回的输出流 、 打印流(PrintStream)

代码示例:

package test5_;import java.io.PrintStream;/*** @Auther: zhoulz* @Description: test5_* @version: 1.0*/
public class Test4_System_out {public static void main(String[] args) {//写到控制台PrintStream out = System.out;//调用方法out.print("你好1");//直接在控制台写出,但是不换行out.print("你好2");out.print("你好3");out.print("你好4");out.println("中国人1");//直接在控制台写出,并且换行操作out.println("中国人2");out.println("中国人3");out.println("中国人4");System.out.println("你好");System.out.println("中国人");}
}

4、练习:键盘录入内容输出到文件中

【1】解决思路:

 【2】代码:

package test5_;import java.io.*;/*** @Auther: zhoulz* @Description: test5_* @version: 1.0*/
public class Test5_a_case {public static void main(String[] args) throws IOException {//1、先准备输入方向//键盘录入:InputStream in = System.in; //System.in属于字节流!!!//字节流 ——> 字符流:InputStreamReader isr = new InputStreamReader(in);//在isr外面再套一个缓冲流:BufferedReader br = new BufferedReader(isr);//2、再准备输出方向//准备目标文件File f = new File("d:\\Demo.txt");FileWriter fw = new FileWriter(f);BufferedWriter bw = new BufferedWriter(fw);//3、开始动作String s = br.readLine();while (!s.equals("exit")){//条件是:s != null的话,则会一直录入bw.write(s);bw.newLine();//文件中换行s = br.readLine();}//4、关闭流bw.close();br.close();}
}

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

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

相关文章

Odoo | 页面视图的跳转逻辑

目录前言页面跳转的流程及逻辑点击后进入 call\_botton方法,验证先检查method方法名。内置方法,检查方法名,如果是私有方法,提示错误。方法名合法之后进入call\_kw方法,检查api的值。获取一些系统的上下文,…

【3D游戏建模全流程教学】使用3dmax制作教堂场景

本文分享了使用3dmax制作教堂场景的流程,并解释V-Ray的渲染过程。 01场景制作 在网站中收集许多的参考图像,然后使用平面、立方体和圆柱体等基本形状来制作场景。再制作基础照明以了解场景的构图和总体外观,从视口制作预览动画。 下一步是创…

计算机体系机构的发展

40年代,当时的 计算机是采用什么样的方式来工作的,比如是不是采用存储程序的方式还是采用程序控制的方式,最典型的是第一台计算机他是采用硬件互联的方式实现的,第一台采用存储程序的计算机时ENIAC 60年代,人们更关注…

Vue中的数据代理

什么是数据代理 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)。 想要更加深刻的理解什么是数据代理,就必须先了解JS中对象的一个方法:Object.defineProperty(),数据代理主要使用Object.defineProperty()的第三个参数…

构建性能测试知识体系

转载:https://mp.weixin.qq.com/s?__biz=MzkwNTI2NjAxMA==&mid=2247484048&idx=1&sn=6700370d90c5c5ceae2729297f6e8ef4&chksm=c0fb14a5f78c9db3ae1bd31e50a1253a95d2a97ae1888ee22025d0c5bed4bd86a63599dd36cb&scene=178&cur_album_id=233153993986…

《对线面试官》| 高频 Redis 面试题(上)

目录前言百分之99面试官都爱问的 Redis 面试题1、谈下你对 Redis 的了解2、Redis适用于哪些场景?不适用于哪些场景?3、Redis 支持的数据类型有哪些?4、既然Redis是单线程架构,但为什么这么快?5、什么是缓存穿透&#x…

星巴克急了,瑞幸就稳了?

(图片来源于网络,侵删) 文|螳螂观察 作者|易不二 新消费下行,但咖啡赛道却异常拥堵。 Manner正在不亦乐乎玩联名、Tims中国进入上市倒计时、茶颜悦色挤进了咖啡市场、幸运咖开始反攻一线...... 跨界的玩家们就更是从四面八方…

【Shell篇三】Shell数组

文章目录一、Shell数组的定义二、Shell数组的常用操作三、Shell数组的增删改查四、Shell数组的遍历一、Shell数组的定义 Bash Shell只支持一维数组定义时使用圆括号,元素用空格分开初始化数组时不需要定义数组的大小 eg: array(A 1 B "C" 3) array2()也…

voron 2.4 皮带张紧度调节

相关视频 【浅谈一下Voron2.4打印机,让入门者有个清晰的定位和了解】https://www.bilibili.com/video/BV1KL4y1N76C?share_source=copy_web&vd_source=4df36574d866076e5078105782af91de Z轴AB轴

(01)ORB-SLAM2源码无死角解析-(64) BA优化(g2o)→闭环线程:Optimizer::OptimizeSim3→Sim3变换优化

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析-接如下: (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/123092196 文末正…

白名单里的蓝桥杯“计算思维”竞赛到底考啥,有啥用处?

可能很多人都已经知道了,教育部公布的《2022-2025学年面向中小学生的全国性竞赛活动名单》正式宣告了,蓝桥杯全国软件和信息技术专业人才大赛成为了白名单比赛中的一员了。 而根据蓝桥杯的竞赛说明,2023年4月15~16日,以及4月22~2…

微信对接百度实现文字识别OCR

微信对接百度实现文字识别OCR 前置基础条件: ①注册测试账号 ②开通自己的测试公众号 ③完成与微信互发消息 ④完成自定义菜单栏 详细步骤:https://blog.csdn.net/weixin_45565886/category_12059118.html 1 获取到百度文字识别API ①注册百度智能云账…

Tomcat修改端口、添加域名访问

一、修改改端口 1、修改默认访问端口8080,改为80 # vim /usr/local/tomcat/conf/server.xml (路径是自己的安装目录)<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding=&…

spring 原理解析

spring 要解决的问题 1.spring 是如何创建一个bean对象的 bean对象其实就是一个实例 无非通过一些当时来丰富这个对象的内容 典型的就是aop和依赖注入 spring在通过构造方法创建一个实例对象后 就进入一个aop的阶段&#xff0c;这个阶段来实现属性 参数的依赖注入&#xf…

自然资源部第三地理信息制图院与Bigemap强强联手,共同推动多元化新GIS应用

近日&#xff0c;成都比格图数据处理有限公司(以下简称&#xff1a;Bigemap)与自然资源部第三地理信息制图院正式达成战略合作&#xff0c;未来双方将共同推动"基于矢量、影像、地形、实景三维等GIS数据在行业上的深化应用及国产化替代"合作。 自然资源部第三地理信…

小程序技术可助力智慧医疗企业破茧突围?

智慧医疗作为充分应用计算机技术、信息技术建立的新型医疗方式&#xff0c;正随着新一代信息技术的普及和医疗健康领域需求的变化迎来爆发期。智慧医疗作为充分应用计算机技术、信息技术建立的新型医疗方式&#xff0c;正随着新一代信息技术的普及和医疗健康领域需求的变化迎来…

基于java的果蔬在线销售系统/农产品销售系统

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要…

8-3 通过Grafana展示Prometheus的Node和Pod数据

文章目录前言Node数据node-exporter指标数据Prometheus采集node-exporter数据Grafana展示node-exporter数据导入模板Pod数据cadvisor指标数据Prometheus采集cadvisor数据Grafana展示cadvisor数据导入模板修改名字前言 在上一章节 8-2 通过Node-Exporter和Cadvisor收集指标数据…

多种点击试剂PEG:DBCO-PEG24-Maleimide, DBCO-PEG12-Mal性质总结

●中文名&#xff1a;二苯并环辛炔-PEG24-马来酰亚胺、二苯并环辛炔-二十四聚乙二醇-马来酰亚胺 ●英文&#xff1a;DBCO-PEG24-Maleimide&#xff0c;DBCO-PEG24-Mal ●外观以及性质&#xff1a;浅黄色或无色油性&#xff0c;西安凯新生物科技有限公司供应的​DBCO系列产品包…

MybatisPlus二级缓存不失效原因(缓存与数据库不一致)

​&#x1f4d2;个人主页&#xff1a;热爱生活的李&#x1f4d2; ​❤️感谢大家阅读本文&#xff0c;同时欢迎访问本人主页查看更多文章​❤️ &#x1f62d;技术太菜了希望下次不要出现了&#x1f62d; &#x1f64f;本人也在学习阶段&#xff0c;如若发现问题&#xff0c;请…