1. 程式人生 > >Java位元組流實現資料夾的拷貝

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);

  }

  }