java 实训第13天 IO流

news2024/11/8 17:30:15

Java IO流

一、说明
    I: Input    输入
    O:    Output    输出
    
    输入和输出的方向:
        输入(Input): 从其他的资源读取数据到java程序。
        输出(Output):从java程序写出数据到其他资源载体。
        
二、Java中的IO操作分类

    1. 以字符作为最小单位进行操作,本质仍然是字节流(字符流)
    2. 以字节作为最小单位操作(字节流)  
    
    java中io操作的接口:
                    输入            输出
        字节流    -    InputStream  - OutputStream   
        字符流    -    Reader       - Writer  
        
三、字符流
Writer:
1、定义
    Writer是字符输出流:
    
    Writer是一个抽象类,不能直接使用,需要通过它的已知实现类操作  
    操作的是文件 - Writer - OutputStreamWriter - FileWriter 


2、FileWriter
    构造方法:
        FileWriter(File file)  
        FileWriter(File file, boolean append)  
        FileWriter(String fileName)  
        FileWriter(String fileName, boolean append)  
        
        说明:
            append表示是否打开追加模式,
                true 表示将当前内容追加到原文件的末尾
                false    表示用当前内容重写原文件
                
    
    常用方法:
        void write(int c);  
        void write(char[] cbuf);  
        void write(char[] cbuf, int off, int len);
        void write(String str);  
        void write(String str, int off, int len);
        
    说明:
        wite方法,不会立即将数据写入磁盘的文件中,而是先写入到缓冲
        区,目的是为了提高效率,当缓冲区满了后,数据会流入文件;如果
        不希望数据留在缓冲,则可以调用flush方法,立即刷新。
        
    刷新缓冲区:
        void flush() //刷新缓冲区
    
    关闭文件输出流: 在关闭流时会自动调用flush方法
        void close()
        
Reader:字符输入流
    继承关系:Reader - InputStreamReader - FileReader
    
    构造方法:
        FileReader(File file) //接受一个File对象
        FileReader(String fileName)//接受一个文件的路径字符串
    
    常用方法:
        read() //读取第一个字符
        read(char[] cbuf, int offset, int length)
        read(char[] cbuf)
        read(CharBuffer target)
        
    关闭文件输入流:
        void close();
        
    案例:读取文件内容
    //构建文件输入流 FileReader
        FileReader fileReader = new FileReader("D:" + PS + "test" + PS + "out.txt");
        char[] chars = new char[4];
        int readChars = 0;
        while ((readChars = fileReader.read(chars))!=-1){
            String str = new String(chars, 0, readChars);
            System.out.println(str);
        }
        fileReader.close();


练习:
    1、利用File实现递归删除,写死。
    2、统计工作空间下Java文件,并输出代码行数
    3、复制文件
    
    
四、字节流
1、主要的类
    InputStream
    OutputStream
    
    字符流的底层也是基于字节流实现,字节流比较通用。
    

2、FileOutputStream 文件字节输出流
    构造方法:
        FileOutputStream(String name, boolean append)
        FileOutputStream(File file, boolean append)
        
    常用方法:
        write(byte b[])
        
        
    案例代码:
        //定义文件路径
          String path = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro.log";

          FileOutputStream fileOutputStream = null;

          try {
              //打开文件
              fileOutputStream = new FileOutputStream(path);

              //操作文件
              String content = "hello java,欢迎使用idea!";
              fileOutputStream.write(content.getBytes("UTF-8"));
              //fileOutputStream.flush();

          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              //关闭文件
              if(fileOutputStream != null) {
                  try {
                      fileOutputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  } finally {
                      fileOutputStream = null;
                  }
              }
          }
        
    
3、FileInputStream 文件字节输入流
    构造方法:
        FileInputStream(File file)
        FileInputStream(String name)
    常用方法:
        int read()
        int read(byte[] b)

    案例代码:
        //定义文件路径
          String path = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro.log";
          String path1 = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\erro-out.log";


          //构建字节输入流
          FileInputStream fileInputStream = null;

          //构建字节输出流
          FileOutputStream fileOutputStream = null;
          try {
              fileInputStream = new FileInputStream(path);

              fileOutputStream = new FileOutputStream(path1);

              //操作
              byte[] btns = new byte[2];
              //读取2个字节-》btns
              int count = 0;
              //这种问题如何解决?
              while ((count = fileInputStream.read(btns)) != -1) {
                  //将读取的文件数据写出到其他文件
                  //fileOutputStream.write(btns, count);
                  fileOutputStream.write(btns, 0, count);

                  //控制台打印
                  /*String result = new String(btns, "UTF-8");
                  System.out.println(result);*/
              }

          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              //先关输入还是先关输出?  --- 先关输入
              //关闭
              if(fileInputStream != null) {
                  try {
                      fileInputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  } finally {
                      fileInputStream = null;
                  }
              }

              if(fileOutputStream != null) {
                  try {
                      fileOutputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  } finally {
                      fileOutputStream = null;
                  }
              }
          }

    
练习:通过字节输入和输出流实现将视频文件进行复制。


五、装饰器
    由于InputStream&OutputStream没有缓冲区,导致java程序需要直接与磁盘进行IO操作,
    增加了BufferedInputStream&BufferedOutputStream 

1、BufferedInputStream
    构造方法:
        BufferedInputStream(InputStream in)
        BufferedInputStream(InputStream in, int size)

    主要方法:
        synchronized void flush()

2、BufferedOutputStream
    构造方法:
        BufferedOutputStream(OutputStream out)
        BufferedOutputStream(OutputStream out, int size)

3、BufferedReader

    String readLine()    //读取一行


4、BufferedWriter

    在字符的装饰类上扩展了标记功能
    
    //用于标记当前文件中的操作位置
    void mark(int readAheadLimit)
    //将文件操作指针重置到mark标记位
    void reset()
    
案例代码:
    String path = "E:\\java72_projects\\java-api\\src\\cn\\hxzy\\apimod\\day08\\files\\main.txt";

    //从文件中读取字符  file read
    FileReader fileReader = new FileReader(path);
    BufferedReader bufferedReader = new BufferedReader(fileReader);

    //char cha = (char)bufferedReader.read();

    System.out.println((char)bufferedReader.read());
    bufferedReader.mark(10);
    System.out.println((char)bufferedReader.read());
    System.out.println((char)bufferedReader.read());
    System.out.println((char)bufferedReader.read());
    bufferedReader.reset();
    System.out.println((char)bufferedReader.read());
    System.out.println((char)bufferedReader.read());
    System.out.println((char)bufferedReader.read());

    //执行结果: a,b,c,d,b,c,d
    

六、系统流
    
    System.err 标准错误输出流
    System.out 标准输出流
    System.in 标准输入流
    
    Scanner 扫描器
    案例:
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        System.out.println(str);
        
        
    利用装饰器配合系统标准输入流实现扫描器功能:
        BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);

        System.out.println("请输入内容:");
        byte[] bt = new byte[255];
        int read = bufferedInputStream.read(bt, 0, bt.length);
        String str = new String(bt, 0, read, "utf-8");

        System.out.println("您接收的内容是:"+str);
    
    
    
    
    


    


 

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

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

相关文章

数据链路层Mac协议与ARP协议

Mac帧 ​ ​ 如何将有效载荷和报头分离? 根据固定大小 ​​ 报头固定大小,按报头大小分离 如何分用? ​​​​ 类型为0800,代表为IP报文,应该交给网络层IP协议 目的地址 原地址为Mac地址 局域网通信 ​ 局…

轮椅车、医用病床等康复类器具检测设备的介绍

康复类器具检测设备是指用于检测、评估和测试康复类器具的设备。康复类器具包括轮椅、助行器、假肢、矫形器等。这些器具在使用前需要经过检测和评估以确保其满足质量、性能、安全和有效性的要求。 康复类器具的测试项目及其设备主要包括以下几种: 1、力学测试设…

WiFi一直获取不到IP地址是怎么回事?

在当今这个信息化时代,WiFi已成为我们日常生活中不可或缺的一部分。无论是家庭、办公室还是公共场所,WiFi都为我们提供了便捷的无线互联网接入。然而,有时我们可能会遇到WiFi连接后无法获取IP地址的问题,这不仅影响了我们的网络使…

基于SSM+VUE儿童接种疫苗预约管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

城镇住房保障:SpringBoot系统架构解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

软件测试—功能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产…

第十五届蓝桥杯C/C++B组题解——数字接龙

题目描述 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏,游戏在一个大小为N N 的格子棋盘上展开,其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下: 从左上角 (0, 0) 处出发,目标是到达右下角 (N − 1, N …

【9695】基于springboot+vue的学生就业管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取免费源码 项目描述 本学生就业管理系统以springboot作为框架&#xff…

Android使用scheme方式唤醒处于后台时的App场景

场景:甲App唤醒处于后台时的乙App的目标界面Activity,且乙App的目标界面Activity处于最上层,即已经打开状态,要求甲App使用scheme唤醒乙App时,达到跟从桌面icon拉起App效果一致,不能出现只拉起了乙App的目标…

centos7,yum安装mongodb

yum安装mongodb 1.配置MongoDB的yum源2.安装Mongodb3.启动Mongodb4.配置远程访问5.设置mongo密码 1.配置MongoDB的yum源 1.创建yum源文件,输入命令: vim /etc/yum.repos.d/mongodb-org-5.0.repo然后在文件中输入以下内容并保存: [mongodb-…

SpringBoot项目集成ONLYOFFICE

ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化、表格中的 RTL 支持等更新 文章目录 前言ONLYOFFICE 产品简介功能与特点Spring Boot 项目中集成 OnlyOffice1. 环境准备2. 部署OnlyOffice Document Server3. 配置Spring Boot项目4. 实现文档编辑功…

【华为HCIP实战课程31(完整版)】中间到中间系统协议IS-IS路由汇总详解,网络工程师

一、IS-IS的汇总 1、可以有效减少在LSP中发布的路由条目,减小对系统资源的占用。 2、会减少LSP报文的扩散,接收到该LSP报文的其他设备路由表中只会出现一条聚合路由。 3、可以避免网络中的路由震荡,提高了网络的稳定性。 4、被聚合的路由可以是IS-IS路由,也可以是被引入…

LabVIEW编程过程中为什么会出现bug?

在LabVIEW编程过程中,Bug的产生往往源自多方面原因。以下从具体的案例角度分析一些常见的Bug成因和调试方法,以便更好地理解和预防这些问题。 ​ 1. 数据流错误 案例:在一个LabVIEW程序中,多个计算节点依赖相同的输入数据&#…

Vatee万腾平台:让企业数字化转型更轻松、更高效

在数字化浪潮席卷全球的今天,企业数字化转型已成为不可逆转的趋势。然而,对于许多企业来说,数字化转型并非易事,它涉及到技术、人才、流程等多个方面的变革。为了帮助企业顺利实现数字化转型,Vatee万腾平台应运而生&am…

STM32G0xx使用LL库将Flash页分块方式存储数据实现一次擦除可多次写入

STM32G0xx使用LL库将Flash页分块方式存储数据实现一次擦除可多次写入 参考例程例程说明一、存储到Flash中的数据二、Flash最底层操作(解锁,加锁,擦除,读写)三、从Flash块中读取数据五、测试验证 参考例程 STM32G0xx HAL和LL库Flash读写擦除操…

若依管理系统使用已有 Nacos 部署流程整理

背景 玩了一下开源项目 RuoYi 管理系统Cloud 版,卡住的地方是:它用到了 nacos 配置管理,如果用的 nacos 环境是单机且是内置数据库的话,该怎么配置呢? 本文整理本机启动 RuoYi Cloud 应用本地部署的过程,…

快速学习Python框架FastAPI

FastAPI是一种现代、快速(高性能)的Web框架,用于Python 3.6,使用Python类型提示构建API。它的设计初衷是帮助开发者在短时间内开发出高性能的API服务。FastAPI的灵感来源于许多高性能的编程框架,包括Express、Django R…

scala Map集合

一.Map的概述 Map是一种存储键值对的数据结构,Map中的键都是唯一的。 idea实例 二.Map的常见操作 idea实例 三.Map中的查询元素 idea实例 四.Map的常用方法 idea实例 五.Map的遍历 idea实例

Zabbix监控架构

目录 1. Zabbix监控架构-CS架构 2. Zabbix极速上手指南 主机规划 2.1 部署ngxphp环境并测试 检查安装结果 2.2 部署数据库 2.3 编译安装zabbix-server服务端及后续配置 2.4 部署前端代码代码进行访问 前端的配置文件(连接数据库与主机名等信息) 2.5 欢迎来到zabbix 2…

基于vue+neo4j 的中药方剂知识图谱可视化系统

前言 历时一周时间,中药大数据R02系统中药开发完毕,该系统通过scrapy工程获取中药数据,使用python pandas预处理数据生成知识图谱和其他相关数据,利用vuespringbootneo4jmysql 开发系统,具体功能请看本文介绍。 简要…