首页 > 其他分享 >IO流之字符流实战

IO流之字符流实战

时间:2024-03-25 17:33:40浏览次数:20  
标签:字符 fr IO 流之 System File new out String

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

标签:字符,fr,IO,流之,System,File,new,out,String
From: https://blog.csdn.net/Best_jiangX/article/details/137018777

相关文章

  • 【VTKExamples::Points】第十期 NormalEstimation
    很高兴在雪易的CSDN遇见你 VTK技术爱好者QQ:870202403   公众号:VTK忠粉前言本文分享VTK样例NormalEstimation,并解析接口vtkPCANormalEstimation,希望对各位小伙伴有所帮助!感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!你的点赞就是我的动力(^U^)ノ~YO1.Norm......
  • 【云能耗管理系统在某大型商场的应用】安科瑞Acrel-EIOT能源物联网平台方案
    摘要:依据对上海市某大型商场现场考察的结果,提出通过建设云能耗管理系统的方案来改善商场能耗的管理现状。首先充分搜集建筑信息和设备运行工况,合理设计系统实施方案,解决现场数据采集和传输障碍,完成云能耗管理系统的建设,成功实现云能耗管理系统的稳定运行,提高商场运营管理效率;......
  • BOM:window对象,screen对象,history对象,location对象,弹出框,计时相关
    前端基础之BOM和DOMBOM(BrowserObjectModel):之浏览器对象模型,它使JavaScript有能力与浏览器进行'对话'。DOM(DocumentObjectModel):是指文档对象模型,通过它,可以访问HTML文档的所有元素。Window对象所有浏览器都支持window对象,他表示浏览器窗口。如果文档包含框架(fra......
  • constant-current-diode
    导航(返回顶部)1.简介1.1内部结构1.2它是如何工作的1.3属性2.LED绝配?2.1应用LED案例!2.2恒流二极管测量注意事项3.恒流二极管产品统计3.1currentregulatingdiode3.2产品统计分析3.3主流产品3.4更多产品来源1.简介 1.1内部结构 1......
  • iOS、Android获取apk公钥MD5信息
    背景国家工信部规定,所有国内在线或即将上线的APP做备案,否则无法通过域名访问。其中iOS和Android备案所需的APP相关信息我们不能直接明文获取,有公钥,MD5,包名,APP名,接口服务的域名等对于iOS端,如果是开发者,直接在苹果的证书管理网站上下载证书到本地打开,即可获得。参考对于Androi......
  • 我什么时候应该使用TreeMap 而不是 PriorityQueue?反之亦然?
    引子之前周赛(第390场周赛记录-快手)时遇到一题(题干描述见下图,实现代码见周赛记录),需要保持容器元素的动态有序(即随着插入删除操作后列表始终是有序的)。尝试过很多数据结构或方案,如列表存储然后手动调用Arrays.sort()进行排序、使用优先队列实现大/小根堆的方式,但无一例外全部超时......
  • F28004X系列学习总结(3)——GPIO模块
    首先学习的模块就是GPIO,学习完后我们可以做到简单的点灯程序。I/O口配置步骤1、计划自己准备使用的设备引脚2、启动上拉电阻使能(使用GPxPOD寄存器)3、选择输入资格(使用GPxQSELN寄存器,同步、设置采样窗口)4、选择I/O口的方向(使用GPxDIR寄存器)5、选择低功耗模式唤醒源6、选......
  • 学习人工智能:Attention Is All You Need-3-训练;结果;结论;Transformer模型相当于 E=MC^2
    5训练Training本节描述了我们模型的训练方案。5.1训练数据和批次处理TrainingDataandBatching我们在标准的WMT2014英德数据集上进行了训练,该数据集包含约450万个句子对。句子使用字节对编码[3]进行编码,其共享源-目标词汇表包含约37000个标记。对于英法翻译,我们使用......
  • 一次性搞明白了StableDiffusion用到的模型
    很多人在刚入门使用StableDiffusion(下文StableDiffusion我们简称SD)时候,会被各种各样的模型搞得一脸懵圈。什么是模型?什么Checkpoint模型,LoRa模型,VAE模型,究竟这些模型是干什么用的?首先,我们要明白,模型是怎么来的,它是干什么用的?我这里用一种比较通俗易懂的比喻,但是,不是很准......
  • 【喂饭级AI教程】手把手教你在本机安装Stable Diffusion秋包【附带全套资源】
    今天,我们将探索一个为Bilibili社区核心贡献者秋叶大佬所发布的神器——一款整合软件包。这款软件巧妙地简化了学习Python和网络知识这一通常漫长的过程。即使是编程新手,也能轻松入门并开始使用StableDiffusion(简称SD),并且几乎不需要任何调整,就能体验到前沿的AI绘图技术。本......