4.11学习总结

news2025/2/23 7:14:39

一.IO流

一.java中IO的初步了解

(一).概念:

Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。

(二).java IO流的框架图

(三).流的分类:

1.按方向分:

  • 输入流:用来读 in
  • 输出流:用来写 out

2.按一次读取的字节数分:

  • InputStream outputStream
  • Reader Writer
  • 字节流一次读取1个字节 byte 字符流一次读取多个字符
  • 字节流:数据流中最小的数据单元是字节
  • 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节(无论中文还是英文都是两个字节)。

3.按功能分:

  • 节点流:可以从或向一个特定的地方(节点)读写数据,直接连接数据源。如最常见的是文件的FileReader,还可以是数组、管道、字符串,关键字分别为ByteArray/CharArray,Piped,String。.
  • 处理流(包装流):并不直接连接数据源,是对一个已存在的流的连接和封装,是一种典型的装饰器设计模式,使用处理流主要是为了更方便的执行输入输出工作,如PrintStream,输出功能很强大,又如BufferedReader提供缓存机制,推荐输出时都使用处理流包装。

 二.常用的IO流类(部分)

1.InputStream和Reader

InputStream 是字节流输入对象抽象类,它实现了从字节输入流中读取数据的方法。开发人员可以使用子类实现该接口,从而通过该对象获取到 InputStream 中的数据。在输入过程中,系统会将字节编码为字符。此外,InputStream 也提供了诸如关闭流、清空数据缓存等常规操作。

Reader 是用于读取字符流的抽象类,它的子类实现了具体的字符输入流。默认情况下,Reader 所使用的字符编码与平台默认的字符编码相同。因此,在不指定编码的情况下,Reader 将使用操作系统的默认字符编码来读取字符流。

 

实例:

public class io {
    public static void main(String[] args) throws IOException {
        FileInputStream file =new FileInputStream("study1\\text1");
        byte[]arr=new byte[1024];
        int len;
        while((len=file.read())!=-1){
            String str= new String(arr,0,len);
            System.out.println(str);
        }
    }
}
public class IO5 {
    public static void main(String[] args) throws IOException {

        //1.创建对象
        FileReader fr=new FileReader("Study1\\text1");
        //2.读取数据
        //read()底层上也是字节流,但是他是字节流+字节集,遇到汉字就读取多个字节
        int r;
        /*while((r=fr.read())!=-1){
            System.out.print(r);//解码后以十进制形式保cun
        }*/
        while((r=fr.read())!=-1){
            System.out.print((char)r);//解码后以十进制形式保cun
        }
        //3.释放资源
        fr.close();
    }
}

2.OutputStream和Writer

OutputStream 是用于写入字节流的抽象类,它的子类实现了具体的字节输出流。

Writer是用于写入字符流的抽象类,它的子类实现了具体的字符输出流。

 

 

public class IO1 {
    public static void main(String[] args) throws IOException {

        //1.创建字节输出对象
        //参数是字符串表示的路径或者File对象都可以
        //如果文件不存在会创建一个新文件,但要保证父级路径是存在的
        //如果文件已经存在,则会清空文件
        FileOutputStream fos=new FileOutputStream("Study1\\text1");
        //2.写出数据
        //write方法的参数是整数,但是实际上写到本地文件中是以ASCLL对于的字符输出
        fos.write(97);
        byte[]arr={97,98,99,100};
        fos.write(arr);
        //释放资源
        //每次使用完六后都要释放资源
        fos.close();
    }
}
public class WriteFileExample {

    public static void main(String[] args) {
        String content = "这是要写入文件的内容";
        try (Writer writer = new FileWriter("example.txt")) {
            writer.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3.BufferReader和BufferWriter

BufferedReader 继承自 Reader 类,它的作用是从输入流中读取文本数据,并缓冲各个字符,以提供字符、数组和行的高效读取。

BufferedWriter 继承自 Writer 类,它的作用是向输出流中写入字符数据,并缓冲各个字符,以提高写入性能。

这两个类的主要优势在于减少了对底层数据源(例如文件、网络连接等)的直接读写次数,而是将数据先暂存在内存缓冲区中,减少了 I/O 操作的频率,从而提高了读写性能。因此,在需要频繁读写大量数据时,使用 BufferedReader 和 BufferedWriter 可以提高程序的效率。

 

public class IO6 {
    public static void main(String[] args) throws IOException {
        /*
         * 缓冲流:4个
         * 字符缓冲流和字节缓冲流
         *
         * */

        //1.创建对象
        File root=new File("study1\\text1");
        File get=new File("study1\\text2");
        read(root);
        Write(get);
    }

    private static void Write(File get) throws IOException {
        BufferedWriter bw=new BufferedWriter(new FileWriter(get));
        String str1="好好学习";
        String str2="天天向上";
        bw.write(str1);
        bw.newLine();
        bw.write(str2);
        bw.newLine();
        bw.close();
    }

    private static void read(File root) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader(root));
        String line;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
        br.close();
    }
}

 

4.InputStreamReader和OutputStreamWriter

InputStreamReader:把字节输入流转换为字符输入流.

OutputStreamWriter:把字节输出流转换为字符输出流


        //1、创建源和目标
        File srcFile = new File("io"+File.separator+"a.txt");
        File descFile = new File("io"+File.separator+"b.txt");
        //2、创建字节输入输出流对象
        InputStream in = new FileInputStream(srcFile);
        OutputStream out = new FileOutputStream(descFile);
        //3、创建转换输入输出对象
        Reader rd = new InputStreamReader(in);
        Writer wt = new OutputStreamWriter(out);
        //3、读取和写入操作
        char[] buffer = new char[10];//创建一个容量为 10 的字符数组,存储已经读取的数据
        int len = -1;//表示已经读取了多少个字符,如果是 -1,表示已经读取到文件的末尾
        while((len=rd.read(buffer))!=-1){
            wt.write(buffer, 0, len);
        }
        //4、关闭流资源
        rd.close();
        wt.close();

三.操作 IO 流的模板

①、创建源或目标对象

输入:把文件中的数据流向到程序中,此时文件是 源,程序是目标

输出:把程序中的数据流向到文件中,此时文件是目标,程序是源

②、创建 IO 流对象

输入:创建输入流对象

输出:创建输出流对象

③、具体的 IO 操作

④、关闭资源

输入:输入流的 close() 方法

输出:输出流的 close() 方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 2024年4月最新编写的新项目 项目介绍 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示,构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff…

【SpringBoot】SpringBoot项目快速搭建

本文将介绍Springboot项目的快速搭建 快速创建SpringBoot项目 打开IDEA在File->New->Project中新建项目 点击左侧的Spring Initializr 输入以下信息: Name 项目名称Group 根据公司域名来,或者默认com.example【倒序域名】Package Name 包名&am…

【java探索之旅】走进循环结构 深入解析while、for和do while的用法

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、循环结构1.1 while循环1.2 while代码示例1.3 break1.4 continue 二、for循环2.1 基…

蓝桥杯第十一届c++大学B组详解

目录 1.字符串排序 2.门牌制作 3.即约分数 4.蛇型填数 5.跑步锻炼 6.七段码 7.成绩统计 8.回文日期 9.字串分值和 10.平面切分 1.字符串排序 题目解析:这个题目真没搞懂。有会的大佬教我一下谢谢。 2.门牌制作 题目解析:出过超级多这类题目&am…

Java springboot+vue宠物爱心组织管理系统附赠万字文档

项目演示视频: (有文档)Java springboot宠物爱心组织管理系统 项目介绍: (有文档)Java springboot宠物爱心组织管理系统 技术: 基于springboot Vue 的宠物爱心组织管理系统(宠物爱心组织管理系统&#xf…

12-pyspark的RDD算子注意事项总结

目录 相近算子异同总结相近变换算子异同foreach和foreachPartitionfold和reducecoalesce和repatition 相近动作算子异同cache和persist 算子注意事项需要注意的变换算子需要注意的动作算子 PySpark实战笔记系列第三篇 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第…

【记录】Prompt模板|作为甲方怎么清晰专业地描述自己的需求(又名“乙方,给你的甲方扔个GPT解放自己吧”)

这篇Prompt摘抄并修改自朋友送给我的书的第49页5.2.3让ChatGPT构建提示,质量挺不错,支持一下她的博客:【好书推荐2】AI提示工程实战:从零开始利用提示工程学习应用大语言模型。 书长这样: 不啰嗦了,正文如…

代码解读:使用Stable Diffusion完成相似图像生成任务

Diffusion models代码解读:入门与实战 前言:作为内容生产重要的一部分,生成相似图像是一项有意义的工作,例如很多内容创作分享平台单纯依赖用户贡献的图片已经不够了,最省力的方法就是利用已有的图片生成相似的图片作为…

vscode 之 win11前端环境安装(javascrip、html、nodejs以及插件推荐)

javascript 也可以用来编写一些小工具,包括但不限于浏览器的插件,浏览器的书签以及进行一些其他操作的小工具等。 这时候就需要进行安装前端相关的测试环境 1. nodejs (1)确保电脑存在 nodejs 的环境 在 cmd 输入 npm -v node -…

DataEase-V1.18版本源码通过Docker镜像部署与静态资源通过阿里云OSS存储实现看这一篇就够了

修改DataEase实现静态资源阿里云OSS存储 后端源码文件读取配置类配置 1.阿里云OSS配置类 /*** ClassName AliyunConfig.java* author shuyixiao* version 1.0.0* Description 阿里云OSS配置* createTime 2024年04月03日 10:03:00*/ Data Configuration public class AliyunC…

Docker端口一直占用问题,docker重置(端口无法释放)(彻底重置docker环境)

文章目录 背景解决方法:彻底重置docker环境1. 停止所有Docker容器2. 删除所有容器3. 删除所有Docker镜像4. 删除所有Docker网络5. 删除所有Docker卷6. 清理Dangling资源7. 停止Docker服务8. 删除Docker数据和配置文件9. 重启Docker服务10. 验证 在这里插入图片描述验…

PostgreSQL入门到实战-第十四弹

PostgreSQL入门到实战 PostgreSQL数据过滤(七)官网地址PostgreSQL概述PostgreSQL中BETWEEN 命令理论PostgreSQL中BETWEEN 命令实战更新计划 PostgreSQL数据过滤(七) BETWEEN运算符允许您检查值是否在值的范围内。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容…

“桃花庵主”是我国哪位古代名人的称号?2024年4月12日蚂蚁庄园今日答案

原文来源:蚂蚁庄园今日答案 - 词令 蚂蚁庄园是一款爱心公益游戏,用户可以通过喂养小鸡,产生鸡蛋,并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料,使用鸡饲料喂鸡之后,会可以获得鸡蛋&…

2024年腾讯云新用户云服务器价格表

腾讯云作为国内领先的云服务提供商,以其稳定可靠、灵活高效的服务赢得了广大用户的信赖。对于新用户而言,腾讯云提供了丰富的云服务器产品,并且制定了具有竞争力的价格策略,以吸引更多的新用户加入。 首先,我们来看一下…

【C++】STL--stackquene

这一节主要学习stack、quene和priority_quene的使用以及模拟实现,最后介绍了容器适配器。 目录 stack的介绍和使用 stack的介绍 stack的使用 stack的模拟实现 queue的介绍和使用 queue的介绍 queue的使用 queue的模拟实现 priority_queue的介绍和使用 pri…

Spring Boot与Vue联手打造智能化学生选课平台

末尾获取源码作者介绍:大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与…

嵌入式工程师需要掌握哪些技术?

嵌入式系统是当今科技领域中的重要组成部分,它们存在于我们生活的方方面面,从智能手机到汽车控制系统,从家电到医疗设备。因此,对于那些想要进入嵌入式行业的人来说,掌握一些必要的技术能力是至关重要的。在本篇中&…

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerExceptio、,mapper为null【解决方法】

springboot 反射调用ServiceImpl时报错:java.lang.NullPointerException、mapper为null【解决方法】 问题描述问题分析解决方案创建SpringBootBeanUtil编写调用方法 executeMethod调用 总结 问题描述 在使用Spring Boot时,我们希望能够通过反射动态调用…

Win11又来「重大」更新!

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站ai人工智能工具 更多资源欢迎关注 Windows 11预览通道的22635.3420版本迎来了几个比较大的改进,主要有三个方面: …

Springboot 大事务问题的常用优化方案

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1.前言 2.什么是大事务 3.解决办法 3.1.少用Transactional注解 3.2..将查询…