[Java] Java对文件的操作是移动快还是复制快?

先说结论 

        移动功能时间短,并且在同磁盘更快

为何会有这疑问?

        因我公司项目需求。

        场景如下:客户生产环境中,经过客户的校验把AI识别错误的照片找出来,然后在让AI系统进行训练。如果让客户自己找很麻烦。所以想通过代码实现。就落到了小弟的头上。

代码实现

        1.复制功能

        

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.time.Duration;
import java.time.Instant;

class CopyFile {
    public static void main(String[] args) {
        Instant minioTime = Instant.now();
        String srcPathStr = "D:\\temp\\a\\jdk-8u191-windows-x64.exe"; //源文件地址
        String desPathStr = "E:\\temp\\b"; //目标文件地址
        //获取源文件的名称
        String newFileName = srcPathStr.substring(srcPathStr.lastIndexOf("\\") + 1); 
        //源文件地址
        desPathStr = desPathStr + File.separator + newFileName;
        try {
            //创建输入流对象
            FileInputStream fis = new FileInputStream(srcPathStr);
            //创建输出流对象
            FileOutputStream fos = new FileOutputStream(desPathStr);
            //创建搬运工具数据集
            byte datas[] = new byte[1024 * 8];
            //创建长度
            int len = 0;
            //循环读取数据
            while ((len = fis.read(datas)) != -1)
            {
                fos.write(datas, 0, len);
            }
            fis.close();//释放资源
            fis.close();//释放资源
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("耗时:"+ Duration.between(minioTime, Instant.now()).toMillis());
    }
}

2.移动功能

import java.io.File;
import java.time.Duration;
import java.time.Instant;

class MoveFile {
    public static void main(String[] agrs) {
        Instant minioTime = Instant.now();
        try {
            //源文件
            File file = new File("D:\\temp\\a\\jdk-8u191-windows-x64.exe");
            //源文件移动至目标文件目录
            if (file.renameTo(new File("E:\\temp\\b\\" + file.getName()))) {
                //输出移动成功
                System.out.println("success!");
            } else {
                //输出移动失败
                System.out.println("fail!");
            }
            System.out.println("耗时:" + Duration.between(minioTime, Instant.now()).toMillis());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 结果

        源文件为200MB的文件。

实测结果
复制功能移动功能
同磁盘耗时:1231耗时:6
不同磁盘耗时:1178耗时:788

综上所述移动功能时间短,并且在同磁盘更快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值