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

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.