Java中通过线程来Copy文件从一个路径到另一个路径

题目:

使用多线程实现多个文件同步复制功能。例如:把文件A复制到E盘某文件夹下复制到F盘。

可能太难,所以一步一步来,先来一个文件的复制。

Demo.java

package com.CopyFile;

import java.io.*;

public class Demo {

    public static void main(String[] args) throws IOException {
        Filecopy.readFile();  //自己创建的类名,和方法名
    }
}

----------------------------------------------------------------------------

Filecopy.java

package com.CopyFile;

import java.io.*;

public class Filecopy {
    public static final String COPY_FILE = "F:\\lalala.txt";  //需要copy的文件
    public static final String TARGET_FILE  = "E:\\hahaha.txt"; //copy的目标路径
    public static void readFile() throws IOException {     //抛出IO异常
        File file = new File(COPY_FILE);     //new一个file对象
      File outFile = new File(TARGET_FILE);   //new一个outfile对象
        if (outFile.isFile()) {     //如果没有找到目标文件,则创建新的文件
            outFile.createNewFile(); 调用方法创建文件
        }
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(file);     //文件输入流
            os = new FileOutputStream(outFile); //文件输出流
            int length=0;  //读取的长度
            byte[] temp = new byte[1024]; // 一次读取1024字节
            while ((length = is.read(temp)) != -1) {
                os.write(temp,0,length); // 写入新文件中
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//关闭输入输出流
            if (os != null) {
                os.close();
            }
            if (is != null) {
                is.close();
            }
        }
    }
}




通过线程来复制文件:

Demo.java
------------------------
package com.CopyFile;

import java.io.*;

public class Demo {
    public static final String COPY_FILE = "F:\\lalala.txt";  //需要copy的文件
    public static final String TARGET_FILE = "E:\\hahaha.txt"; //copy的目标路径

    public static void main(String[] args) throws IOException {
        Filecopy fc = new Filecopy(COPY_FILE, TARGET_FILE);    //自己创建的类名,和方法名
        fc.start();

    }
}

************************************************

Filecopy.java

-------------------------

package com.fuzhiThread;

import static  com.fuzhiThread.Demo.COPY_FILE;
import static  com.fuzhiThread.Demo.TARGET_FILE;
import java.io.*;

public class CopyFile extends Thread{

    public void run(){
        File file = new File(COPY_FILE);
        File outFile = new File(TARGET_FILE);

        if (outFile.isFile()){
            try {
                outFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        InputStream is = null; //因为在最后需要关闭输入输出流,所以定义在外面。
        OutputStream os = null;

        try {
          is = new FileInputStream(file);
          os = new FileOutputStream(outFile);
            int length = 0;
            byte[] temp = new byte[1024];  //一次输出1024字节,1M,当然,也可以定义为2M或者更多。
            if((length = is.read(temp)) != -1){  //如果没有读完,则继续读,若完毕则跳出while循环。
                os.write(temp, 0, length); // 从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。JDK1.8支持。
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                is.close(); //关闭输入流
                os.close(); //关闭输出流
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}




 

你可能感兴趣的:(java)