JAVA中文件夾的複製和文件的遍歷

文件夾的複製和文件的遍歷主要原理是:先遍歷源文件夾裏面的所有文件和文件夾,並保存到一個文件路徑數組中,然後循環這個數組,如果是文件就用FileInputStream和FileOutputStream類來實現複製功能,如果是文件夾,則用遞歸方法遞歸遍歷裏面的文件和文件夾,

主要的實現方法是用File類的API來遍歷要操作文件和文件夾,



具體怎麼用,我寫了一個小測試代碼級大家看吧,我再在代碼裏面寫一點註釋,告訴大家怎麼用就好了
代碼如下:
//
import java.io.*;

class FileMove
{
        public static void main(String[] args)
        {
                try{
                //傳入兩個文件夾路徑,其中在Windows中使用的分隔符是"\\"
                CopyFile("D:\\5555","D:\\1234");
                }
                catch(Exception ex){}
                System.out.println("Copy File is over!");
        
        }
        
        //複製文件夾的方法,開始的時候是兩個文件夾
        public static void CopyFile(String source,String destin) throws Exception //在這裏直接拋出各種異常,就不一一處理了
        {
                File path1=new File(source);
                File path2=new File(destin);
                
                //如果源目錄不存在,那就不用複製了,
                if(path1.exists())
                {
                        //Create destination folder,如果目標目錄不存在,就創建目標目錄,因爲沒有目錄文件複製不過去的
                        if(!path2.exists())
                        {
                                path2.mkdirs();
                        }
                        
                        //取得源目錄下面的所有文件和文件夾
                        File[] items=path1.listFiles();
                        FileInputStream fis=null;
                        FileOutputStream fos=null;
                        
                        //取得所有文件和文件夾之後,遍歷處理,如果是文件,就複製文件,如果是文件夾,則遞歸文件夾下面的文件和文件夾
                        for(File item:items)
                        {
                                //如果是文件才進行復制
                                if(item.isFile())
                                {
                                    //輸入輸出流的兩個常用構造函數,其中在用來了一個字段File.separator,先用輸入流讀取文件,然後用輸出流寫文件到目標位置,完成複製功能
                                        fis=new FileInputStream(item);
                                        fos=new FileOutputStream(path2+File.separator+item.getName());
                                        byte[] b=new byte[1024];
                                        for(int i=0;(i=fis.read(b))!=-1;)
                                        {
                                                fos.write(b,0,i);
                                                fos.flush();
                                        }
                                        
                                        //close the Stream關閉資源啊,什麼異常處理的就不寫,自己補上吧
                                        fos.close();
                                        fis.close();                                        
                                
                                }
                                //如果是文件夾,遞歸文件夾
                                else
                                {
                                        CopyFile(item.getPath(),path2+File.separator+item.getName());
                                }
                        }                        
                }
                else
                {
                        System.out.println("source path:"+source+" is not exists!");
                }                
        }
}
//

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章