利用I/O进行文件的拷贝、合并、拆分

博客主要介绍了文件操作相关内容,包括文件拷贝,需提供准确路径、验证路径、处理父路径等;文件合并,将多个文件内容合并到新文档,拷贝时设置可追加;文件拆分,校验步骤同前,需确定碎片文件大小并分布拆分,还给出了相应代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、文件的拷贝
1、提供能够访问到被拷贝文件及目标文件的准确路径
2、验证所提供的被拷贝文件路径是否正确是否为空
3、检查是否存在目标文件的父路径,若不存在,需重新建立
4、将所提供的路径转换成File对象
5、开始拷贝
以下是具体代码实现:

 public static void copy(String srcFilePath,String destFilePath){
        //检验参数合法性
        if(srcFilePath==null||destFilePath==null){
            throw new IllegalArgumentException("format is null");
        }
        File srcFile=new File(srcFilePath);
        File destFile=new File(destFilePath);
       if(!srcFile.isFile()||!srcFile.exists()){//若所提供的源文件路径不正确或者不是个文件,则抛出错误
            throw new IllegalArgumentException("srcFile is not a file or not exists ");
        }
        if(!destFile.getParentFile().exists()){//若提供的目标文件父目录不存在,则重新建立
            destFile.getParentFile().mkdirs();
        }
        try(FileInputStream srcFileStream=new FileInputStream(srcFile);
            FileOutputStream destFileStream = new FileOutputStream(destFile)
        ) {
            byte[] data=new byte[5];
            int len=-1;
            while((len=srcFileStream.read(data))!=-1){//循环copy
                destFileStream.write(data,0,len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

以下是我的测试代码:

 public static void main(String[] args) {
       String src="D:"+File.separator+"test"+File.separator+"test1.txt";
       String dest="D:"+File.separator+"test"+File.separator+"test2.txt";
        copy(src,dest);
    }

运行出来的结果如下:
在这里插入图片描述
在这里插入图片描述
二、文件的合并
提供几个文件,要求将这几个文件的内容合并到一个新的文档
步骤和上面的拷贝所差无几,只是在拷贝到的时候将FileOutStream的append值改为true,将文件定义成可追加文件即可
具体实现的代码如下:

 public static void merge(String[] srcFiles,String destFilepath){
        if(srcFiles==null||destFilepath==null){
            throw new IllegalArgumentException("format is null");
        }
        File destFile=new File(destFilepath);
        if(!destFile.getParentFile().exists()){
            destFile.getParentFile().mkdir();
        }
        for(int i=0;i<srcFiles.length;i++){
            if(srcFiles[i]==null){
                throw new IllegalArgumentException("you have inputed a illegalargument");
            }
            File srcFile=new File(srcFiles[i]);
            byte[] data=new byte[5];
            int len=-1;
            try(FileInputStream in=new FileInputStream(srcFile);
                FileOutputStream out=new FileOutputStream(destFile,true)) {
                while((len=in.read(data))!=-1){
                    out.write(data,0,len);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

我的测试代码如下:

   public static void main(String[] args) {
        String[] src1={"D:"+File.separator+"test"+File.separator+"test3.txt","D:"+File.separator+"test"+File.separator+"test4.txt"};
        String dest1="D:"+File.separator+"test"+File.separator+"test5.txt";
        merge(src1,dest1);
    }

运行后结果如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
三、文件的拆分
如果要实现文件的拆分,前面校验步骤同上,然后
1、提供每一个碎片文件的大小,及需要将目标文件拆分为几个多大的碎片文件
2、分布拆分
具体实现代码如下:

 public static void SplitFile(String  srcFilePath,int destLength){
        //自定义碎片文件的大小  然后将指定文件分割成指定大小
        if(srcFilePath==null||destLength==0){
            throw new IllegalArgumentException("format must not be null or Length must no be 0");
        }
        File srcFile= new File(srcFilePath);
        if(!srcFile.exists()&&srcFile.isFile()){
            throw new  IllegalArgumentException("srcFile is not a file or is not exists");
        }
        int count=0;
        int len=-1;
        byte[] data=new byte[destLength];
        try(FileInputStream in= new FileInputStream(srcFilePath)) {
            while((len=in.read(data))!=-1){
                File destFile=new File("D:"+File.separator+"test"+File.separator+"test"+(++count)+".txt"+File.separator);
                FileOutputStream out= new FileOutputStream(destFile);
                out.write(data);
                out.flush();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值