天天看點

java檔案的複制(含目錄)

import org.junit.Test;

import java.io.*;

public class CopyTest {
    @Test
    public void test1(){
       dir("xxx","xxx"); //輸入原檔案的路徑和目标路徑
        //copy(file);
    }

    private void dir(String src,String des) {
        File file = new File(src);   //擷取源目錄檔案
        File[] files = file.listFiles(); //展開到數組
        if(files == null){
            return;
        }
       if(!(new File(des).exists()))
           new File(des).mkdirs();  //對于已經确定是目錄的外部des先建立目錄
        for (int i = 0; i < files.length; i++) {  //對des内部的檔案周遊
            if (files[i].isFile()) {        //判斷是檔案還是目錄
               copy(files[i].getPath(),des+File.separator+files[i].getName());//檔案的目前路徑作為源路徑,目标路徑即檔案名
            } else if (files[i].isDirectory()){
              dir(files[i].getPath(),des+File.separator+files[i].getName()); // 子目錄必須也得重新統計, 遞歸調用,目标路徑加上檔案名稱作為下次疊代的新路徑
            }
        }

    }

    public void copy(String src,String des){
        FileInputStream fio =null;
       //BufferedInputStream bio = null;

        FileOutputStream foo = null;
       //BufferedOutputStream boo = null;

        try {
            fio =new FileInputStream(src);
           // bio = new BufferedInputStream(fio);

            foo = new FileOutputStream(des);
           // boo = new BufferedOutputStream(foo);
            byte[] ch = new byte[8192];
           int n;
            while((n=fio.read(ch))!=-1){
                foo.write(ch,0,n);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fio!=null){
                try {
                    fio.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(foo!=null){
                try {
                    foo.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}