Java位元組流實現資料夾的拷貝
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
· java位元組流實現資料夾的拷貝
· 拷貝資料夾,其中資料夾中又有多個檔案
· 1.先遍歷這個資料夾,判斷是否是目錄
· 2.建立資料夾
· 3.拷貝檔案到新的地方
· */
public class FileDirectoryCopyDemo {
//遍歷資料夾
public static void copy(File srcDir,File destDir){
//遍歷srcDir資料夾
File[] list=srcDir.listFiles();
for(File f:list){
//先判斷是否是目錄,在目錄資料夾裡建立一個子目錄
if(f.isDirectory()){
String name=f.getName(); //獲取目錄的名字
//呼叫方法去目錄資料夾裡建立子目錄
File newDestDir=makeDir(destDir,name);
//遞迴
copy(f,newDestDir);
}else{
//如果不是目錄,就拷貝檔案
File dest=new File(destDir,f.getName());
fileCopy(f,dest);
}
}
}
public static File makeDir(File parent,String name){
File f=new File(parent,name);
f.mkdir();//建立資料夾
return f;
}
//檔案拷貝函式
public static void fileCopy(File src,File dest){
InputStream in=null; //輸入流,負責讀檔案
OutputStream out=null; //輸出流,負責寫入檔案
try{
in=new FileInputStream(src);
out=new FileOutputStream(dest);
long start=System.currentTimeMillis();
//定義緩衝區
byte[] buffer=new byte[1024];
int len=-1;
· while((len=in.read(buffer))!=-1)//說明還沒有讀到檔案的結尾
· {
· out.write(buffer,0,len); //輸出流寫入一個位元組
· }
· long end=System.currentTimeMillis();
· //資料夾下有幾個檔案就耗時幾次
· System.out.println(拷貝檔案耗時:+(end-start)+毫秒);
· }catch(Exception e){
· e.printStackTrace();
· }finally{
· try {
· in.close();
· out.close();
· } catch (IOException e) {
· // TODO Auto-generated catch block
· e.printStackTrace();
· }
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//拷貝之前的原檔案 haha是個資料夾
File src=new File(D:+File.separator+haha);
//拷貝之後的檔案
File dest=new File(F:+File.separator+haha);
if(!dest.exists()){
dest.mkdir(); //建立資料夾
}
copy(src,dest);
}
}