Java中复制文件并计算用时多长时间

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

public class Test {
    /*
         需求 : 把 "图片路径\xxx.jpg" 复制到当前模块下

        分析:
            复制文件,其实就把文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)
            数据源:
                xxx.jpg  --- 读数据 --- FileInputStream
            目的地:
                模块名称\copy.jpg --- 写数据 --- FileOutputStream

        数据源 : "F:\java进阶版资料\liqin.jpg"
        目的地 : "day10_demo\copy.jpg"
     */
    public class FileInputStreamDemo2 {
        public static void main(String[] args) throws IOException {
            long beginTime = System.currentTimeMillis();//开始时间
            copyFile();
            long endTime = System.currentTimeMillis();//结束时间
            System.out.println("拷贝文件花费了:" + (endTime - beginTime) + "毫秒");
        }

        //选择要抽取出来的代码,使用快捷键:alt + ctrl + m      可以把代码抽取到另一个文件中

        private static void copyFile() throws IOException {
            //源文件
            File src = new File("F:\\files\\ABC.jpg");
            //目标文件
            File dest = new File("day10_demo/files/copy.jpg");

            //创建字节输入流,并关联源文件(从源文件中读取字节数据)
            FileInputStream fis = new FileInputStream(src);
            //创建字节输出流,并关联目标文件(向目标文件中写入字节数据)
            FileOutputStream fos = new FileOutputStream(dest);

            //文件复制: 使用循环,从源文件读取数据,写入到目标文件中
            int data = -1;
            while ((data = fis.read()) != -1) {
                //使用输出流向目标文件中写入读取到的字节数据
                fos.write(data);
            }

            //释放资源
            fis.close();
            fos.close();
        }
    }
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Java多线程实现文件复制的示例程序: ```java import java.io.*; public class FileCopyThread extends Thread { private File sourceFile; private File targetFile; public FileCopyThread(File sourceFile, File targetFile) { this.sourceFile = sourceFile; this.targetFile = targetFile; } public void run() { try { FileInputStream in = new FileInputStream(sourceFile); FileOutputStream out = new FileOutputStream(targetFile); byte[] buffer = new byte[4096]; // 缓冲区大小为4KB int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } in.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { File source = new File("source.txt"); File target = new File("target.txt"); int threadCount = 4; // 创建4个线程 long fileSize = source.length(); long blockSize = fileSize / threadCount; for (int i = 0; i < threadCount; i++) { long start = i * blockSize; long end = (i == threadCount - 1) ? fileSize : (i + 1) * blockSize; new FileCopyThread(source, target, start, end).start(); } } } ``` 该程序使用了多线程来复制文件。首先,将要复制文件分成若干个块,每个块由一个线程处理。在 `FileCopyThread` 类的构造函数,需要传入源文件和目标文件,以及该线程需要复制文件块的起始和结束位置。在 `run()` 方法,使用 `FileInputStream` 和 `FileOutputStream` 分别读取和写入文件,每次读取缓冲区大小的数据,并使用 `while` 循环重复读取和写入,直到文件复制完成。 在 `main()` 方法,首先指定源文件和目标文件,然后指定要创建的线程数。接着,计算每个线程需要复制文件块的起始和结束位置,并创建 `FileCopyThread` 对象,并启动该线程。 需要注意的是,该示例程序没有考虑多线程并发读写文件的问题,可能会产生竞争条件和文件损坏等问题。在实际应用,需要使用线程同步机制来保证线程安全。同时,该程序还没有处理文件不存在等异常情况,也需要根据实际需求进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值