Java(IO异常解释(为什么要捕获异常,为什么要给NULL)

实现copy的代码:

java 复制代码
package a0420.iotest1.Test2;

import java.io.IOException;

public class Test {
    public static void main(String[] args) {
            CopyMethod.FileCopy("D:\\idealTestio\\copy.txt","D:\\idealTestio\\finalPase");
    }
}

主要想解释一下这个异常为什么要这么写:

请详细看我代码里的解释:

java 复制代码
package a0420.iotest1.Test2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyMethod {
    public static void FileCopy(String basePath,String finalPath ){
        File startFile=new File(basePath);
        File endFile=new File(finalPath);

        FileInputStream fis=null;//为什么要把这两个弄出来定义?
        FileOutputStream fos=null;//因为这个如果不弄出来定关闭流的时候可能会没有流对象
                                  //定义空是因为要给初始值才能调方法例如后面用这个流调了关闭                                                    
                                     流的方法(要给初始值才能调用方法不然调不出来) 



        try {
            fis=new FileInputStream(startFile);
            fos=new FileOutputStream(endFile);
            byte[] bytes=new byte[1024];
            int len;
            while((len=fis.read(bytes))!=-1){
                fos.write(bytes,0,len);
            }
        } catch (IOException e){
            e.printStackTrace();
        }finally {//关闭流放在这个里面是为了必须要关闭


            if(fos!=null){//判断为空是因为如果为空的话控制台会报控制指针异常

                try {

                    fos.close();//这里捕获异常是因为clos的原因,搜了一下有很多种原因
                                //我比较赞成的一种原因是:可能前面会关掉,可能流会异常关不掉                                                                                
                                 等等所以会抛出异常!!!!!!!

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis!=null){//这里就和上面的输出流解释一样了
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
相关推荐
SL_staff40 分钟前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
饮水桶_T1 小时前
JAVA IO流笔记
开发语言·数据结构·算法
三翼鸟数字化技术团队1 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java
SL_staff2 小时前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈
特立独行的猫A2 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
学长毕设2 小时前
基于SpringBoot的高校后勤报修管理系统-附源码
java·spring boot·后端
特立独行的猫A2 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python
杨凯凡3 小时前
Spring AI RAG 实战:向量检索、租户过滤、引用溯源与防幻觉边界
java·人工智能·spring
Felven3 小时前
C. Brr Brrr Patapim
c语言·开发语言
小科先生3 小时前
Java springboot调用数据库的基本流程
java·数据库·spring boot