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

相关文章

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. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹