首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >IO流异常标准处理代码(示范JDK1.7版本之前和JDK1.7版本的标准)

IO流异常标准处理代码(示范JDK1.7版本之前和JDK1.7版本的标准)

作者头像
砖业洋__
发布于 2023-05-06 09:14:45
发布于 2023-05-06 09:14:45
20100
代码可运行
举报
文章被收录于专栏:博客迁移同步博客迁移同步
运行总次数:0
代码可运行

代码如下:以字节流为例(CSDN网站最大的bug就是很多模版不能写null,无法显示,为了显示这里用c++模版代替java模版)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

class myClose implements AutoCloseable {
    @Override
    public void close() {
        // TODO Auto-generated method stub
        System.out.println("myClose类的close()");
    }
}

public class Demo9_IOException {
    public static void main(String[] args) throws IOException {
        //demo(); // 1.7版本之前
        demo1(); // 1.7版本

    }

    private static void demo1() throws IOException {
        /**
         * 1.7版本标准异常处理代码
         */
        try (FileInputStream fis = new FileInputStream("aaa.txt");
                FileOutputStream fos = new FileOutputStream("bbb.txt");
                myClose mc = new myClose();) { // 剩下的写在代码块{}中,执行完之后自动关流
            int b;
            while ((b = fis.read()) != -1) {
                fos.write(b);
            }
        }
        // 这里的try是()而不是{},()里面的对象必须实现AutoCloseable接口,执行完之后自动关流
    }

    private static void demo() throws IOException  {
        /**
         * 
         * @author lcy 1.7版本之前标准异常处理代码
         */
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream("aaa.txt"); // 可能文件不存在
            fos = new FileOutputStream("bbb.txt");
            int b;
            while ((b = fis.read()) != -1) {// 可能文件不可读
                fos.write(b); // 可能文件不可写
            }
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } finally {
                if (fos != null) { // 可能fis没关上抛出异常,保证fos.close()执行
                    fos.close();
                }
            }
        }
    }
}

1.7版本是try()

而不是try{}

能够写在try(...)的括号里面的类对象必须实现AutoCloseable 接口,这里用myClose类做示范,实现Closeable都不行,必须实现AutoCloseable接口,这样try(...)里面的对象执行完代码块{...}里面的内容后(即大括号里面的内容执行完毕后小括号里面的对象会自动关闭),会自动调用自己的close()方法去关流,所以FileInputStream和FileOutputStream都是实现了AutoCloseable 接口的

因为public class FileInputStream extends InputStream

public abstract class InputStream implements Closeable

public interface Closeable extends AutoCloseable

所以它们是实现了AutoCloseable接口的,去FileInputStream和FileOutputStream里面都能找到close()方法的

是不是还没这么做过?惊不惊喜?意不意外?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java基础笔记20
20.01_IO流(IO流概述及其分类) 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流。 流按操作类型分为两种: 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 字符流 : 字符流只能操作纯字符数据,比较方便。 2.IO流常用父类 字节流的抽象父类: InputStream OutputStream 字符流的抽象父类: Reader Writer 3.IO程序书
dreamkong
2018/06/21
4580
Java基础知识(九)--IO
IO 概念 IO流用来处理设备之间的数据传输 java对数据的操作是通过流的方式 java用于操作流的类都在io中 流按流向分为两种 : 输入流, 输出流 流按操作类型分为两种: 字节流 : 字节流可以操作任何数据,因为计算机中任何数据都是以字节的形式存储的 字符流: 字符流只能操作纯字符数据,比较方便 IO流常用父类 字节流的抽象父类: inputStream OutputStream 字符流的抽象父类: Reader Writer IO流FileInputStream FileInputStream f
用户7386338
2021/05/13
3100
第53节:Java当中的IO流(上)
标题图 Java当中的IO流 在Java中,字符串string可以用来操作文本数据内容,字符串缓冲区是什么呢?其实就是个容器,也是用来存储很多的数据类型的字符串,基本数据类型包装类的出现可以用来解决字
达达前端
2019/07/03
5740
第53节:Java当中的IO流(上)
java中IO流详细解释?
BufferedReader的readLine()&BufferedWriter的newLine()方法
技术从心
2019/08/07
1.8K0
阶段01Java基础day22IO流03
声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/c%e5%ae%9e%e7%8e%b0%e9%9b%b7%e9%9c%86%e6%88%98%e6%9c%ba-29/
对弈
2019/09/04
2910
Java学习【IO流:深入理解与应用(上)】
在Java编程中,IO(Input/Output)流是一个非常重要的概念,它允许我们与各种数据源(如文件、网络、内存等)进行交互。Java的IO库提供了丰富的类和方法,用于读取和写入数据。
2的n次方
2024/10/15
1150
Java学习【IO流:深入理解与应用(上)】
IO流你了解多少
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
3350
IO流你了解多少
Java中IO流,输入输出流概述与总结
根据给定的文章内容,总结为摘要总结。
别先生
2017/12/29
1.4K0
Java基础之IO流(二)
在上一篇中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据。现在我们就要开始给文件中写数据,或者读取文件中的数据
Remember_Ray
2020/08/05
3410
JDK1.9-字节流
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/10
4070
IO流
绝对路径:从盘符开始的路径,这是一个完整的路径 相对路径:相对于项目目录的路径,不是盘符开始,从项目名称的位置开始,不带项目名称
JokerDJ
2023/11/27
2370
IO流
Java基础-20(02)总结,递归,IO流
(4)FileInputStream读取数据 A:操作步骤 a:创建字节输入流对象 b:调用read()方法 c:释放资源 B:代码体现: FileInputStream fis = new FileInputStream("fos.txt"); //方式1 int by = 0; while((by=fis.read())!=-1) { System.out.print((char)by); } //方式2 byte[] bys = new byte[1024]; int le
Java帮帮
2018/03/16
7530
关于什么是IO流
需要转换—转换流InputStreamReader、OutputStreamWriter
用户9399690
2022/01/20
9010
关于什么是IO流
第二十一天 IO-递归&字节流&字符流【悟空教程】
递归就是“在一个方法内可以再次调用自身”,如下,method方法又调用了method方法。
Java帮帮
2018/07/26
7920
第二十一天 IO-递归&字节流&字符流【悟空教程】
java基础第十五篇之IO流和递归算法
缓冲区会在内存中创建一个8192容量的字节数组,内存的运算效率比硬盘要高的多所有只要降低到硬盘的读写次数就会提高效率.
海仔
2019/08/05
1.4K0
JAVA入门学习八
[TOC] 异常概述和分类 概述:异常就是Java程序在运行过程中出现的错误。 异常的分类: 通过API查看Throwable所知在Java.Lang里面使用是不用导包的它是JAVA语言中所有错误或者异常的超类(父根类); Error : 服务器宕机,数据库崩溃等 Exception : 可以接收程序编译和运行时候发生的异常,并且异常子类后缀都是Exception; 异常的继承体系: Throwable (超类) Error Exception 编译时候异常(静态): Java程序必须显示处理,否
全栈工程师修炼指南
2022/09/28
7300
JAVA入门学习八
21天学习挑战赛之java的IO流
​ 把“E:\itcast\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt” (文件可以是任意文件)
楠羽
2022/11/18
3700
JAVA入门学习九
描述:序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时将从被整合的第一个流开始读, 读完一个之后继续读第二个以此类推。 原因:由于多个输入流写入到一个输出流,代码重复性高则采用序列流进行输出; 基础语法:
全栈工程师修炼指南
2020/10/23
4060
Java - IO流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:
kenvie
2022/01/20
7700
Java - IO流
Java基础(二十二):File类与IO流
java.io.Reader抽象类是表示用于读取字符流的所有类的父类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法
Java微观世界
2025/01/21
2890
Java基础(二十二):File类与IO流
相关推荐
Java基础笔记20
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验