【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 异常,可以选择将异常抛出给调用方或上层处理,以让调用方决定如何处理这些异常情况。

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

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

相关文章

48 slab 的实现

前言 这里说的是 内核中分配小对象的一种内存分配方式 slab 呵呵 经典程度不必多说了, 内核使用的大多数数据结构 基本上是基于 slab 进行内存分配的 这里 我们来看一下 slab 如何分配对象 几个分配层级, c->free_list, c->page, c->partial, new_slab 1. 先…

查看 PyCharm 代码文件目录位置

查看 PyCharm 代码文件目录位置 1. Show in Files2. Copy PathReferences 1. Show in Files right click -> Show in Files / Show in Explorer 即可打开目录 2. Copy Path right click -> Copy Path 即可复制目录或文件路径 References [1] Yongqiang Cheng, http…

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】机器视觉(基础篇)(十七)

目录 几个高频面试题目 如何选择合适的面扫相机 算法原理 分辨率与视野 像素尺寸与景深 像素尺寸

通过Linux终端搭建基于HTTP隧道的文件传输系统

嘿,Linux小侠们,准备好挑战一项酷炫的任务了吗?今天我们要一起通过Linux终端搭建一个基于HTTP隧道的文件传输系统,让我们的文件在网络的海洋中畅游无阻! 在开始之前,让我们先来想象一下这个场景&#xff1…

自建AWS S3存储服务

unsetunset前言unsetunset AWS S3(Amazon S3,全名为亚马逊简易存储服务),是亚马逊公司利用其亚马逊网络服务系统所提供的网络在线存储服务。我常用的很多SaaS服务中提供的文件存储功能,底层也都是AWS S3,比…

线代:认识行列式、矩阵和向量

本文主要参考的视频教程如下: 8小时学完线代【中国大学MOOC*小元老师】线性代数速学_哔哩哔哩_bilibili 另外这个视频可以作为补充: 【考研数学 线性代数 基础课】—全集_哔哩哔哩_bilibili 行列式的概念和定义 一般会由方程组来引出行列式 比如一个二阶…

【Python】测量WAV文件播放时长

问题 windows播放WAV音频文件,一般使用API函数,如PlaySound。实际使用发现,从调用PlaySound到实际开始播放存在200ms以上的延时,在游戏编程中音效实时性是个需要解决的问题。 本文主要讨论,windows播放WAV文件的衍生…

后端开发怎么学?

后端开发怎么学? 后端开发可以简单地理解为与前端开发相对应的开发方向。前端开发主要负责构建用户界面、维护用户体验等方面的工作,而后端开发则主要负责处理数据、逻辑和算法等方面的工作。后端开发旨在为前端应用程序提供支持,以帮助实现可…

微信小程序之开发会议OA项目

目录 前言 本篇目标 首页 会议 投票 个人中心 会议OA项目-首页 配置 tabbar mock工具 page swiper 会议信息 会议OA项目-会议 自定义tabs组件 会议管理 会议OA项目-投票 会议OA项目-个人中心 前言 文章含源码资源,投票及个人中心详细自行查看…

Mongodb 文本检索

Mongodb支持对字符串字段的文本检索。在Mongodb atlas中, 对这种文本检索的功能进行了增强。 提到文本检索, 难免不会想到实现非常火爆的AI, 聊天服务等时髦技术。mongodb提供的这种文本检索功能适当的算法实践,似乎可以支持这些应…

【开源】SpringBoot框架开发服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle 在vtk 中有时我们需要监听 键盘或鼠标做一些事; 1. 创建 Actor; Sphere vtk.vtkSphereSource() Sphere.SetRadius(10)mapper vtk.vtkPolyDataMapper() mapper.SetInputConnection(Sphere.GetOutputPort()) actor vtk.vtkAc…

JSON转换List<Map<String, Object>>、Map<String, Object>

废话就不说了 早上10点研究到现在 获取redis的JSON字符串 String getPalletListNew redisService.getRedis(“getPalletListNew”, abroad “” goodsLevel “” startPort “” destinationPort “” maxTon “” minTon); 转换Map<String,Object> public …

找数字

题目描述 已知两个正整数 a&#xff0c;b 。现有一个大于 1 的整数 x &#xff0c;将其作为除数分别除 a&#xff0c;b 得到的余数相同。 请问满足上述条件的 x 的最小值是多少&#xff1f;数据保证 x 有解。 输入 共一行&#xff0c;两个整数 a , b 。 输出 输出这个最小…

立创EDA专业版快速使用和一些快捷键

立创EDA专业版 介绍原理图PCB快捷键原理图PCB 介绍 器件 符号 封装 3D模型 属性 仅支持放置器件在原理图或PCB 一个Board(板&#xff09;只能有一个原理图和PCB&#xff0c;一个原理图可以有多页 原理图 网络标签 是给连接线命名 新建图页 如果一个图页上画不下&#…

第4讲 小程序首页实现

首页 create.vue <template><view class"vote_type"><view class"vote_tip_wrap"><text class"type_tip">请选择投票类型</text><!-- <text class"share">&#xe739;分享给朋友</text&g…

嵌入式开发之SQLite数据库

SQLite是一种轻量级的嵌入式关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一个开源项目&#xff0c;实现了自包含、零配置、无服务器的特性。以下是SQLite的详细介绍&#xff1a; SQLite特点 轻量级&#xff1a;SQLite的代码库极其精简&#xff0c;不需…

STM32中断定时器的使用

使用systimer来产生较为精确的定时&#xff0c;之前使用for循环来产生。 用示例工程时产生错误&#xff0c;原因是调用F103的3种容量器件&#xff0c;需要更换S汇编头函数。 另外在工程设置中&#xff0c;需要把HD设置为MD&#xff0c;重新编译即可成功。

二叉树基础总结

目录 树的定义&#xff1a; 深度和高度&#xff1a; 二叉树 由来 二叉树种类&#xff1a; 满二叉树&#xff1a; 完全二叉树&#xff1a; 严格二叉树&#xff08;Strict Binary Tree&#xff09;&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;…

DoRA(权重分解低秩适应):一种新颖的模型微调方法

来自&#xff1a;小互 DoRA&#xff08;权重分解低秩适应&#xff09;&#xff1a;一种新颖的模型微调方法 DoRA在LoRA的基础上进一步发展&#xff0c;通过将预训练权重分解为“幅度”和“方向”两个部分进行微调。 这种权重分解方法允许DoRA更精细地控制模型的学习过程&…