【IO流】IOException IO流异常

这篇具有很好参考价值的文章主要介绍了【IO流】IOException IO流异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

异常 概括

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
      【IO流】IOException IO流异常,# Java基础语法,开发语言,java

    • b.txt
      【IO流】IOException IO流异常,# Java基础语法,开发语言,java

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
      【IO流】IOException IO流异常,# Java基础语法,开发语言,java

    • b.txt
      【IO流】IOException IO流异常,# Java基础语法,开发语言,java

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
      【IO流】IOException IO流异常,# Java基础语法,开发语言,java

    • b.txt
      【IO流】IOException IO流异常,# Java基础语法,开发语言,java

3. 注意事项

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

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

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

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

  5. 合理抛出:在某些情况下,如果无法处理 IO 异常,可以选择将异常抛出给调用方或上层处理,以让调用方决定如何处理这些异常情况。文章来源地址https://www.toymoban.com/news/detail-827071.html

到了这里,关于【IO流】IOException IO流异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合Redis:java.io.IOException: 远程主机强迫关闭了一个现有的连接。或者控制台报连接超时异常

    场景: 项目启动过后 Redis 连接过一会就会断开,报如下问题: 问题1: 问题2: 问题3: 一、解决 1、设置连接空闲超过 N(秒或毫秒)后关闭,0为禁用:redis.timeout: 60s(这里设置和tcp-keepalive的值一致) 2、设置 redis 服务端的配置文件 redis.conf 中 tcp-keepalive 的时间为60(单位秒

    2024年02月13日
    浏览(41)
  • Failed to parse multipart servlet request; nested exception is java.io.IOException,文件上传异常的问题如何解决

    背景: 有时候我们上传文件时会遇到这种报错, \\\"Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\\\\Users\\\\XXXX\\\\AppData\\\\Local\\\\Temp\\\\tomcat.2460390372185321891.8082\\\\work\\\\Tomcat\\\\localhost\\\\ROOT] is not valid\\\"。 导致上传文件失败。 原因: 这种问题出现的原

    2024年02月03日
    浏览(44)
  • 上传文件提示java.io.IOException: java.io.FileNotFoundException:(系统找不到指定的路径。)

    关键信息: java.io.IOException: java.io.FileNotFoundException: C:UsersbrendonAppDataLocalTemptomcat.6510816303036534023.8099workTomcatlocalhostROOTinvoiceoriginalfile2023-02-1373432e18330dec9a05af2e74d068bfba83e0a88d.pdf (系统找不到指定的路径。) Caused by: java.io.FileNotFoundException: C:UsersbrendonAppDataLocalTemptomcat

    2024年02月12日
    浏览(45)
  • 【JavaSE】Java基础语法(三十六):File & IO流

    java.io.File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。 File:它是文件和目录路径名的抽象表示 文件和目录可以通过File封装成对象 File封装的对象仅仅是一个路径名。它可以是存在的,也可以是不存在的。 | 方法名 | 说明 | | —

    2024年02月07日
    浏览(43)
  • 【方案探讨】 出现java.io.IOException解决方法

    欢迎来到我的博客!在这里,我将分享我对问题的独特见解和解决方案。通过这篇博客,我希望能够为您带来新的思考方式,启发您寻找问题的不同角度,并探索创新的解决方案。 每个问题都是一个机会,是一个学习的过程。在这里,我将分享我对问题的思考过程和解决方案

    2024年04月25日
    浏览(50)
  • java基础入门-18-【IO(异常&File&综合案例)】

    异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常指的并不是语法错误,语法错了,编译不通过

    2024年02月07日
    浏览(46)
  • 【IO流】IOException IO流异常

    异常 概括 IOException(Input/Output Exception,输入/输出异常) 是 Java 编程中常见的异常类型之一。它是 java.io 包中定义的一个异常类,通常用于处理输入/输出操作时可能发生的异常情况。 IOException 表示在进行输入和输出操作时发生了异常,例如文件读写时遇到问题、网络通信中

    2024年02月19日
    浏览(34)
  • 【JavaSE】Java基础语法(二十五):异常

    异常的概述 异常就是程序出现了不正常的情况 异常的体系结构 编译时异常 都是Exception类及其子类 必须显示处理,否则程序就会发生错误,无法通过编译 运行时异常 都是RuntimeException类及其子类 无需显示处理,也可以和编译时异常一样处理 图示 如果程序出现了问题,我们

    2024年02月06日
    浏览(47)
  • 解决Java中的IOException异常

    IOException是Java中的一个受检查异常(Checked Exception)。它是java.io包中定义的异常类之一,用于表示输入输出操作期间可能发生的错误或异常情况。 IOException继承自Exception类,并且是许多其他与输入输出相关的异常类的基类。它是一个广泛的异常类,用于处理与输入输出操作相

    2024年02月15日
    浏览(137)
  • java.io.IOException: Broken pipe管道断开

    一、Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2.客户端读取超时关闭了连接,这时服务器往客户端再写数据就发生了broken pipe异常! 3.端口冲突,地址已被使用,也会导致Broken pipe 二、方案 1.问题一分析服务器为什么挂了。 2.问题二使用jp

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包