1. 程式人生 > >Java 拷貝檔案到指定目錄下檔案中

Java 拷貝檔案到指定目錄下檔案中

注:在使用之前請保證sFile,和 tFile存在可通過一下方法建立檔案

    File tF = new File(sFile);
        if (!tF.exists()) {//判斷存在
            tF.mkdirs();//不存在則重新建立多存目錄
}

/* sFile:原檔案地址,tFile目標檔案地址 */

public void fileChannelCopy(String sFile, String tFile) {
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
File s = new File(sFile);
File t = new File(tFile);
if (s.exists() && s.isFile()) {
try {
fi = new FileInputStream(s);
fo = new FileOutputStream(t);
in = fi.getChannel();// 得到對應的檔案通道
out = fo.getChannel();// 得到對應的檔案通道
in.transferTo(0, in.size(), out);// 連線兩個通道,並且從in通道讀取,然後寫入out通道
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fi.close();
in.close();
fo.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

小編自己也嘗試實現了一下!下面是測試程式碼:

package com.my.demo;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.Date;


/**
 *實現檔案copy
 * @author wyj
 *
 */
public class fileChannelCopy {
/*
* 目錄F:\view.sql 拷貝到 F:\test\view.sql
* */

public static void main(String[] args) {
fileChannelCopy fcc = new fileChannelCopy();
File resfile = new File("F:\\view.sql");
if(resfile.exists()) {
if(resfile.isFile()) {

}else {
System.out.println("不是一個檔案");
}
}else {
System.out.println("F:\\view.sql不存在");
return ;
}

File tfile = new File("F:\\test\\view.sql");
File filePath = tfile.getParentFile();
if(!filePath.exists()) {
filePath.mkdirs();
}
try {
tfile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fcc.copyFile(resfile,tfile);

}
private void copyFile(File resfile,File tfile) {
FileInputStream fis=null;
FileOutputStream fos=null;
FileChannel in=null;
FileChannel out = null;
try {
fis = new FileInputStream(resfile);
fos = new FileOutputStream(tfile);
in = fis.getChannel();// 得到對應的檔案通道
out= fos.getChannel();// 得到對應的檔案通道
long start = System.currentTimeMillis();   
in.transferTo(0, in.size(), out);// 連線兩個通道,並且從in通道讀取,然後寫入out通道
long end = System.currentTimeMillis();        
      System.out.println("執行時間:"+(start-end)+"毫秒");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fis.close();
in.close();
fos.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}