IO流之字符流实战

2024-03-25 21:36
文章标签 实战 字符 io 流之

本文主要是介绍IO流之字符流实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IO流(一)字符流

  • 一、IO流是什么?
  • 二、File类
  • 三、引入IO流
  • 四、代码演示
    • 例题:通过java程序完成文件的复制操作
      • 从文件中读取数据(一个一个读)
      • 向文件中写入数据(一个一个写)
      • 利用缓冲数组读取
      • 利用缓冲数组输出
      • 利用FileReader,FileWriter进行文件复制
        • 正片开始!!!
    • 五、使用IO流建议
  • 总结


一、IO流是什么?

我们在初学Java的时候通常都使用控制台达成需求,但是我们写入的数据的作用域只存在于控制台,数据随着程序执行完毕就消失了,等下一次再运行程序的时候需要重新写入数据,IO流的作用可以将程序中的数据永久的保存到一个数据源中。

二、File类

File类:封装文件/目录的各种信息,对目录/文件进行操作,但是我们 不可以获取到文件/目录中的内容。
File类就是上文提到的数据源,因为我们刚开始使用IO流通常都会将数据写到一个记事本文件里,
File就是将这个文件封装到File中再用IO流进行操作,一下是File的实例化以及一些方法,不过多演示,有兴趣的话可以将代码复制到IDEA中去感受一下。

public static void main(String[] args) {//将目录封装为File类的对象:File f = new File("D:\\IDEA_workspace");System.out.println("文件是否可读:"+f.canRead());System.out.println("文件是否可写:"+f.canWrite());System.out.println("文件的名字:"+f.getName());System.out.println("上级目录:"+f.getParent());System.out.println("是否是一个目录:"+f.isDirectory());System.out.println("是否是一个文件:"+f.isFile());System.out.println("是否隐藏:"+f.isHidden());System.out.println("文件的大小:"+f.length());System.out.println("是否存在:"+f.exists());System.out.println("绝对路径:"+f.getAbsolutePath());System.out.println("相对路径:"+f.getPath());System.out.println("toString:"+f.toString());

三、引入IO流

I/O : Input/Output的缩写,用于处理设备之间的数据的传输。

形象理解:IO流 当做一根 “管”
在这里插入图片描述

四、代码演示

例题:通过java程序完成文件的复制操作

从文件中读取数据(一个一个读)

public static void main(String[] args) throws IOException {//文件--》程序://1.创建一个File类的对象File f = new File("d:\\Test.txt");//2.创建一个FileReader的流的对象,利用FileReader这个流,这个“管”连接到数据源上去FileReader fr = new FileReader(f);//3.进行操作“吸”的动作  ---》读取动作int n = fr.read();					//读取程序中的数据while(n!=-1){System.out.println(n);			//循环读取,打印到控制台n = fr.read();}//4.关闭流//流靠虚拟机本身没有办法帮我们关闭,此时必须程序员手动关闭:fr.close();}

向文件中写入数据(一个一个写)

public static void main(String[] args) throws IOException {//1.有个目标文件:File f = new File("d:\\demo.txt");//2.创建一个FileWriter的流的对象,利用这个对象,将这个“管”连接到数据源上去FileWriter fw = new FileWriter(f);//3.开始动作:输出动作://一个字符一个字符的往外输出:String str = "hello你好";//因为字符串的底层逻辑是char类型数组,所以字符串可以获得到长度for (int i = 0 ;i < str.length();i++){			fw.write(str.charAt(i));}//4.关闭流:fw.close();}

利用缓冲数组读取

public static void main(String[] args) throws IOException {//1.创建一个File类的对象File f = new File("d:\\Test.txt");//2.创建一个FileReader的流的对象FileReader fr = new FileReader(f);//3.读取动作char[] ch = new char[50];//缓冲数组int len = fr.read(ch);//一次读取50个:返回值是这个数组的有效长度while(len!=-1){//如果读取动作结束后数组里有东西,也就是有效长度不是-1//方式1:/*for (int i = 0 ;i < len;i++){System.out.println(ch[i]);}*///正确方式2:将数组转为String:(建议使用)String str = new String(ch,0,len);System.out.print(str);len = fr.read(ch);//重新读取下一次}//4.关闭流fr.close();}

利用缓冲数组输出

public static void main(String[] args) throws IOException {//1.有个目标文件:File f = new File("d:\\demo.txt");//2.创建一个FileWriter的流的对象,利用这个对象,将这个“管”连接到数据源上去FileWriter fw = new FileWriter(f,true);//3.开始动作:输出动作:char[] ch = new char[50];int len = fr.read(ch);while(len!=-1){String s = new String(ch,0,len);fw.write(s);len = fr.read(ch);//继续写下一批}//4.关闭流:fw.close();}

利用FileReader,FileWriter进行文件复制

正片开始!!!

思路:边读边写

public class Test04 {//这是一个main方法,是程序的入口: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.新建一个读取的管连接到源文件上:FileReader fr = new FileReader(f1);//4.新建一个输出的管连接到目标文件上:FileWriter fw = new FileWriter(f2);//方式3:利用缓冲字符数组,将数组转为String写出。char[] ch = new char[50];int len = fr.read(ch);while(len!=-1){String s = new String(ch,0,len);fw.write(s);len = fr.read(ch);}//6.关闭流:(关闭流的时候,先开的后关!!!)fw.close();fr.close();}

五、使用IO流建议

文本文件:.txt、 .java、 .c、 .cpp --------------------------------------建议使用字符流操作
非文本文件:.jpg、 .mp3、 .mp4、 .doc 、 .ppt---------------------建议使用字节流操作

总结

以上就是IO流的字符流的使用,以及文本文件复制的全过程,本文重点有File类,大家如果不了解可以自行查阅资料,读取和写入的几种方法,其中使用缓冲数组提升效率,还有就是利用字符流完成文本文件的复制,主要思路是一边读取一边写入,初学者慢慢体会,欢迎各位大神指正。

这篇关于IO流之字符流实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846316

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结