首页 > 代码库 > 文件拷贝

文件拷贝

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Files;

public class FileCopy {
    public static void fileCopyByByte(String inPah, String outPah)
            throws FileNotFoundException, IOException {
        byte[] byteArray = new byte[1024];
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                inPah));
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(outPah));
        int readCount = 0;
        while ((readCount = bis.read(byteArray)) != -1) {
            bos.write(byteArray, 0, readCount);
            bos.flush();
        }
        bis.close();
        bos.close();
    }

    public static void fileCopyByChar(String inPah, String outPah)
            throws FileNotFoundException, IOException {
        char[] charArray = new char[1024];
        BufferedReader reader = new BufferedReader(new FileReader(inPah));
        BufferedWriter writer = new BufferedWriter(new FileWriter(outPah));
        int readCount = 0;
        while ((readCount = reader.read(charArray)) != -1) {
            writer.write(charArray, 0, readCount);
            writer.flush();
        }
        reader.close();
        writer.close();
    }

    public static void fileCopyByFileChannel(String inPah,String outPah) throws FileNotFoundException,IOException{
        FileInputStream fis = new FileInputStream(inPah);
        FileOutputStream fos = new FileOutputStream(outPah);
        FileChannel fileChannel_from = fis.getChannel();
        FileChannel fileChannel_to = fos.getChannel();       

        ByteBuffer bytebuffer = ByteBuffer.allocate(1024);
        
        // Read data from file into ByteBuffer
        int bytesCount;
        while ((bytesCount = fileChannel_from.read(bytebuffer)) > 0) {
         //flip the buffer which set the limit to current position, and position to 0             
         bytebuffer.flip();
         //write data from ByteBuffer to file
         fileChannel_to.write(bytebuffer);
         //for the next read
         bytebuffer.clear();
        }
    }

    public static void main(String[] args) {
        try {
            long begin = System.currentTimeMillis();
            fileCopyByByte("e:/1.mkv", "e:/2.mkv");
            System.out.println(System.currentTimeMillis() - begin);
            begin = System.currentTimeMillis();
            fileCopyByFileChannel("e:/1.mkv", "e:/3.mkv");
            System.out.println(System.currentTimeMillis() - begin);
            begin = System.currentTimeMillis();
            Files.copy(new File("e:/1.mkv").toPath(), new File("e:/4.mkv").toPath());
            System.out.println(System.currentTimeMillis() - begin);
            
        } catch (FileNotFoundException e) {
                e.printStackTrace();
        } catch (IOException e) {
                e.printStackTrace();
        }
    }
}

 

文件拷贝