【IO流】IOException IO流异常

IOException IO流异常

    • 1. 概述
    • 2. try...catch异常处理
      • 2.1 基础做法
      • 2.2 JDK7方案
      • 2.3 JDK9方案
    • 3. 注意事项

异常 概括

1. 概述

IOException(Input/Output Exception,输入/输出异常)是 Java 编程中常见的异常类型之一。它是 java.io 包中定义的一个异常类,通常用于处理输入/输出操作时可能发生的异常情况。

IOException 表示在进行输入和输出操作时发生了异常,例如文件读写时遇到问题、网络通信中出现异常等。它是一个 checked 异常,意味着在编写代码时必须显式处理或抛出该异常,以避免编译错误。

一些常见的IOException类型包括 FileNotFoundException(文件未找到异常)、EOFException(意外到达文件结尾异常)、SocketException(套接字异常)、SocketTimeoutException(套接字超时异常)等。

2. try…catch异常处理

try-catch 异常处理机制是一种在 Java 编程中常用的处理异常的方式。它允许开发人员捕获和处理在 try 块中发生的异常,并采取相应的措施,以确保程序在出错时能够进行适当的处理而不会中断或崩溃。

详细信息,请看 异常

2.1 基础做法

try…catch异常处理

  • 基本做法:try…catch…finally

  • 利用try…catch…finally捕获拷贝文件中代码出现的异常

  • 格式:

    	    try {
    	    //可能出现异常的代码
    	    } catch () {
    	    //可能出现的异常
    	    } finally {
    	    //一定会执行的代码
    	    }
    

    注意:被finally控制的语句一定会执行,除非JVM退出

  • 代码示例

    package text.IOStream.IOException;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /* try...catch异常处理
    基本做法:try...catch...finally
    利用try...catch...finally捕获拷贝文件中代码出现的异常
    
    格式:
        try {
        //可能出现异常的代码
        } catch () {
        //可能出现的异常
        } finally {
        //一定会执行的代码
        }
    
    注意:被finally控制的语句一定会执行,除非JVM退出
     */
    public class IOException01 {
        public static void main(String[] args) {
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try {
                //创建对象
                fis = new FileInputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileInputStream\\FileInputStream03\\a.txt");
                fos = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileInputStream\\FileInputStream03\\b.txt");
                //拷贝数据
                //核心思想:边读边写
                int b;
                while ((b = fis.read()) != -1) {
                    fos.write(b);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //释放资源
                //规则:先开的流最后关闭
                if (fos != null) {   //判断直接输出流对象是否为空,为空则不需要释放资源(表示内存-->程序的通道没搭建上)
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fis != null) { //判断字节输入流对象是否为空,为空则不需要释放资源(表示程序-->内存的通道没搭建上)
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    
  • 输出结果

    • a.txt
      在这里插入图片描述

    • b.txt
      在这里插入图片描述

2.2 JDK7方案

JDK7方案

  • 好处:资源用完自动释放
  • 格式:
    	try (创建流对象1;创建流对象2) {    //创建流对象语句,如果多个,使用';'隔开
    		//可能出现异常的代码
    	} catch (异常类名 变量名) {
    	    //异常的处理代码
    	}
    
    注意:不能把所有的创建流对象的类写在 (创建流对象1;创建流对象2) 中,只有实现了 AutoCloseable的类才能在小括号中创建对象
  • 代码示例
    package text.IOStream.IOException;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    /* try...catch异常处理
    JDK7方案
    - 好处:资源用完自动释放
    - 格式:
    try (创建流对象1;创建流对象2) {    //创建流对象语句,如果多个,使用';'隔开
    	//可能出现异常的代码
    } catch (异常类名 变量名) {
        //异常的处理代码
    }
    
    注意:不能把所有的创建流对象的类写在 (创建流对象1;创建流对象2) 中,只有实现了 AutoCloseable的类才能在小括号中创建对象
     */
    
    public class IOException02 {
        public static void main(String[] args) {
            try (FileInputStream fis = new FileInputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileInputStream\\FileInputStream03\\a.txt");
                 FileOutputStream fos = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileInputStream\\FileInputStream03\\b.txt")
            ) {
                //拷贝数据
                //核心思想:边读边写
                int b;
                while ((b = fis.read()) != -1) {
                    fos.write(b);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
  • 输出结果
    • a.txt
      在这里插入图片描述

    • b.txt
      在这里插入图片描述

2.3 JDK9方案

JDK9方案

  • 好处:资源用完自动释放
  • 格式:
       创建流对象1;
       创建流对象2;
       try (流对象1;流对象2) {
          //可能出现异常的代码
       } catch (异常类名 变量名) {
          //异常的处理代码
       }
    
    注意:不能把所有的创建流对象的类写在 (创建流对象1;创建流对象2) 中,只有实现了 AutoCloseable的类才能在小括号中创建对象
  • 代码示例
    package text.IOStream.IOException;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /* try...catch异常处理
    JDK9方案
    - 好处:资源用完自动释放
    - 格式:
    创建流对象1;
    创建流对象2;
    try (流对象1;流对象2) {
       //可能出现异常的代码
    } catch (异常类名 变量名) {
       //异常的处理代码
    }
    注意:不能把所有的创建流对象的类写在 (创建流对象1;创建流对象2) 中,只有实现了 AutoCloseable的类才能在小括号中创建对象
    */
    public class IOException03 {
        public static void main(String[] args) throws FileNotFoundException {
            FileInputStream fis = new FileInputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileInputStream\\FileInputStream03\\a.txt");
            FileOutputStream fos = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileInputStream\\FileInputStream03\\b.txt");
            try (fis; fos) {
                //拷贝数据
                //核心思想:边读边写
                int b;
                while ((b = fis.read()) != -1) {
                    fos.write(b);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
  • 输出结果
    • a.txt
      在这里插入图片描述

    • b.txt
      在这里插入图片描述

3. 注意事项

  1. 捕获异常:在进行输入/输出操作时一定要考虑可能出现的异常情况,并使用 try-catch 块来捕获可能抛出的 IOException。这样可以避免程序在出现异常时崩溃。

  2. 精准处理:在捕获 IOException 时要根据具体的情况做出相应的处理,可以选择重新尝试操作、关闭资源、记录日志或向用户报告错误信息等。

  3. 资源释放:在处理完 IO 操作后,及时关闭相关的输入流或输出流,以释放资源并避免内存泄漏。可以使用 try-with-resources(JDK 7及以上版本引入的自动资源管理)来简化资源管理代码。

  4. 谨慎处理:一些 IO 操作可能会引发其他类型的异常(如 FileNotFoundExcepion、SocketException 等),因此在处理 IOException 时要考虑可能产生的不同异常情况,并进行适当的处理。

  5. 合理抛出:在某些情况下,如果无法处理 IO 异常,可以选择将异常抛出给调用方或上层处理,以让调用方决定如何处理这些异常情况。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

速看!2024年泰国国际电力能源展10月16-18日

2024年泰国(亚洲)国际电力能源展暨电工技术设备展 展会时间:2024年10月16-18日 展会地点:泰国.曼谷BITEC会展中心 主办单位:新加坡Fireworks展览集团 组织单位:武汉柏翰展览有限公司(Fireworks China) …

SQL Developer 小贴士:Unshared Worksheet

在Oracle SQL Developer中,最常用的功能应该是SQL Worksheet,或Worksheet。 可以创建两类Worksheet,即Worksheet和Unshared Worksheets。前者是共享数据库连接的,后者会单独创建自己的连接。前者的快捷键是AltF10;后者…

趋高技术开发出超低价的视觉尺寸测量仪软件

2024年1月1日元旦节当日,深圳市趋高技术有限公司Fuxi实验室开发组成员成功开发出一款视觉尺寸测量仪软件。这款软件类比市场价格处于超低价。仅报三千二百元。有需要的码农或客户都可以了解一下,带回家。 趋高技术HITREND是深圳的一家高科技公司。 …

阅读笔记(SOFT COMPUTING 2018)Seam elimination based on Curvelet for image stitching

参考文献: Wang Z, Yang Z. Seam elimination based on Curvelet for image stitching[J]. Soft Computing, 2018: 1-16. 注:SOFT COMPUTING 大类学科小类学科Top期刊综述期刊工程技术 3区 COMPUTER SCIENCE, ARTIFICIAL INTELLIGENCE 计算机&#xf…

【论文解读】Latency-Aware Collaborative Perception

Latency-Aware Collaborative Perception 摘要引言方法SystemSyncNet 实验 摘要 协作感知最近显示出提高单智能体感知感知能力的巨大潜力。现有的协同感知方法通常考虑理想的通信环境。然而,在实践中,通信系统不可避免地存在延迟问题,导致安…

IO进程线程第一天

1.完成注册登录功能: 做个小菜单,功能1:是注册功能,输入注册账户和注册密码,将账户和密码写入文件中 功能2:是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户…

应用回归分析:岭回归

岭回归,也称为Tikhonov正则化,是一种专门用于处理多重共线性问题的回归分析技术。多重共线性是指模型中的自变量高度相关,这种高度的相关性会导致普通最小二乘法(OLS)估计的回归系数变得非常不稳定,甚至无法…

二维码的颜色怎么改变?轻松3步修改二维码样式

怎么修改二维码的颜色呢?一般我们制作的二维码或者经过系统生成的二维码大多都是黑白颜色的,有些小伙伴会觉得不太美观无法满足自己的使用需求。那么对于想要修改二维码样式的小伙伴,可以使用二维码生成器的二维码美化功能来处理,…

力扣 第 124 场双周赛 解题报告 | 珂学家 | 非常规区间合并

前言 整体评价 T4的dp解法没想到,走了一条"不归路", 这个区间合并解很特殊,它是带状态的,而且最终的正解也是基于WA的case,慢慢理清的。 真心不容易,太难了。 T1. 相同分数的最大操作数目 I 思路: 模拟 c…

【机构vip教程】Charles(1):Charles的介绍及安装

Charles Charles 是在 Mac (Charles是跨平台的 )下常用的网络封包截取工具,在做移动开发、测试时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles是一个HTTP代理服务器,HTTP监视器,反转代…

白酒:制曲工艺的微生物多样性及其作用

在云仓酒庄豪迈白酒的制曲工艺中,微生物多样性是一个关键要素。曲是白酒生产中的重要配料,它由小麦、麸皮等原料制成,经过微生物的发酵和生长而形成。微生物的多样性和相互作用对曲的品质和白酒的口感具有重要影响。 首先,微生物多…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(3)数据准备和数据预处理

项目开始,首先要进行数据准备和数据预处理。 数据准备的核心是找到这些数据,观察数据的问题。 数据预处理就是去掉脏数据。 缺失值的处理,格式转换等。 延伸学习: 在人工智能(AI)的众多工作流程中&#…

anomalib1.0学习纪实-续2:三个文件夹

为了读懂程序,有三个最重要的文件夹,如下图: 正好对应四个类,如下图: 三个类的来源如下图所示: 注意,MVTec是个大类,里面用到了这里的第四个类MVTecDataset,代码如下。…

Java入门教程:介绍、优势、发展历史以及Hello World程序示例

Java入门教学 java语言介绍 Java是由Sun Microsystems公司(已被Oracle公司收购)于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。 Java分为三个体系: JavaSE(J2SE&…

沁恒CH32V30X学习笔记06---串口dma接收+空闲中断组合接收数据

DMA 控制器提供 18 个通道,其中 DMA1 包含 7 个通道,DMA2 包含 11 个通道,每个通 道对应多个外设请求,通过设置相应外设寄存器中对应 DMA 控制位 通道映射 dma1 dma2 示例代码 bsp_usart_it.c /** bsp_usart_it.c** Created on: 2024年2月18日* Author: admin*/…

快排——OJ题

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、颜色划分1、题目讲解2、算法原理3、代码实现 二、排序数组1、题目讲解2、算法原理3、代码…

创建菜单与游戏页面

bootstrap地址 Bootstrap v5 中文文档 Bootstrap 是全球最受欢迎的 HTML、CSS 和 JS 前端工具库。 | Bootstrap 中文网 (bootcss.com) 创建导航栏组件 web--src--components--NavBar.vue <!-- html --> <template><nav class"navbar navbar-expand-lg n…

设计模式复习

单例模式 确保一个类最多只有一个实例&#xff0c;并提供一个全局访问点。 &#xff08;某个类的对象有且仅有一个&#xff0c;单例的对象充当的是全局变量的角色&#xff0c;为什么在C里面不直接使用全局变量&#xff0c;而是使用单例来代替全局变量&#xff0c;因为如果直接…

【C++学习手札】多态:掌握面向对象编程的动态绑定与继承机制(初识)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;世界上的另一个我 1:02━━━━━━️&#x1f49f;──────── 3:58 &#x1f504; ◀️ ⏸ ▶️ ☰ &am…

删除链表的倒数第N个节点

删除链表的倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 进阶&#xff1a;你能尝试使用一趟扫描实现吗&#xff1f; 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例…