1. 程式人生 > >java調用copy復制子文件夾及文件到指定目錄(非xcopy)

java調用copy復制子文件夾及文件到指定目錄(非xcopy)

後悔 xcopy exceptio exce put line 昨天 stat 效率

因為作所以煩因為煩所以快樂...(為什麽不先查一下有沒有現成的命令,後悔啊!!)

不知道有xcopy這個命令就自己想寫個復制子目錄和文件的功能。。。以下故事誕生了

是這樣的,昨天在學校弄的半成品,半成品弄完晚上就跟朋友打cf了。。。他是個會帶隊團滅的牛逼人物!!

然後隔天早上去學校就拿半成品測試了一下,發現直接用copy只能復制文件啊,不能直接復制子目錄裏的文件(目錄指的是文件夾,子目錄就是文件夾裏面還有文件夾當然也有可能是文件)。。。。。那怎麽搞???糾結了一下,就開始把半成品稍微改了一下,似乎沒什麽卵用。。

然後就在那聽歌,在想,在發呆。。(厲害了我的哥),那位團滅的牛逼人物還時不時來跟我說話,就這樣一上午過去了。。。

然後就去吃飯了,反正一早上就想了一個大概的思路。

首先要知道:目錄裏有n個文件,n個目錄;n個目錄裏又有n個文件及n個目錄以此類推沒完沒了的(沒完沒了是假的誇張一點而已)

我是這樣想的:

1.判斷如果是文件直接復制到目標目錄,如果是目錄就保存到集合,保存的同時在目標目錄先創建好要復制的目錄

if(是目錄){

在目標文件夾創建要復制的文件夾

路徑保存到集合

}esel{

執行copy命令進行賦值

}

2.剛剛也說了目錄裏有可能有n個文件和n個子目錄很多種可能(自己想想)

那麽我只要再加個循環遍歷這個集合裏的目錄,再進行一次判斷,如果是文件還是跟第一次一樣直接復制到目標目錄

如果是目錄繼續保存到集合

大概這樣寫:

if(是目錄){

在目標文件夾創建要復制的文件夾

路徑保存到集合

for(int i=0...){

if(是目錄){

在目標文件夾創建要復制的文件夾

保存到集合

}else{

直接復制過去

}

}

}else{

執行copy命令進行賦值

}

大概思路就是這樣子。

貼上代碼:

 1 package com.d9.util;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.IOException;
6 import java.io.InputStreamReader; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 public class dosCopyTest { 11 12 public static void main(String[] args) throws IOException { 13 String path="f:\\test1"; 14 String targetPath="f:\\copytest"; 15 File file1=new File(path); 16 File file2=new File(targetPath); 17 file2.mkdirs(); 18 String strname []=file1.list(); 19 Runtime run=Runtime.getRuntime(); 20 Process p=null; 21 List<String> lpath=new ArrayList<String>(); 22 for(String fn:strname) { 23 file2=new File(path+"\\"+fn); 24 if(file2.isDirectory()) { 25 new File(targetPath+"\\"+fn).mkdirs(); 26 lpath.add("\\"+fn+"\\"); 27 for(int i=0;i<lpath.size();i++) { 28 file2=new File(path+lpath.get(i)); 29 String strname1 []=file2.list(); 30 for(String fn1:strname1) { 31 if(new File(path+lpath.get(i)+fn1).isDirectory()) { 32 new File(targetPath+lpath.get(i)+fn1).mkdirs(); 33 lpath.add(lpath.get(i)+fn1+"\\"); 34 }else { 35 p=run.exec("cmd /c copy "+path+lpath.get(i)+fn1+" "+targetPath+lpath.get(i)+fn1); 36 BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 37 String line = null; 38 while ((line = reader.readLine()) != null) { 39 System.out.println(line); 40 } 41 } 42 } 43 } 44 }else { 45 p=run.exec("cmd /c copy "+path+"\\"+fn+" "+targetPath+"\\"+fn); 46 BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 47 String line = null; 48 while ((line = reader.readLine()) != null) { 49 System.out.println(line); 50 } 51 } 52 } 53 } 54 }

這樣就可以連帶子目錄和文件一起復制了,測試過沒毛病的。

其實早上也寫的差不多,但是寫的有點亂,中午吃完飯回來在那改,改到上課還是沒改完。。

課上完還是在那改。。。改得超級煩,因為思路都短路了,都不知道自己在改什麽代碼看起來實在有點亂(佩服自己寫的代碼)

放學回到家坐了一會就打算重寫一遍。開了機打開了eclipse然後腦子一直在想春風十裏春風十裏春風十裏春風十裏春風十裏,在想我的優酷會員什麽時候過期~過期~過期~過期,想著想著就直接打開了youku,居然更新到29集了

發現還有3集可以看。。。此時此刻我都沒糾結要不要去寫代碼,直接點開就看,連吃飯都在看,3集被ko。看了之後心情好爽!唯一不爽的就是那個女主角周冬雨惡心。。

心情好寫代碼效率才高,寫代碼效率高心情才會好。。所以該放松就得放松該幹嘛就幹嘛

看完10點多了。。。然後就把eclipse重新打開。。重新整理了一下思路

15分鐘寫完了???

用dos命令可以用xcop 命令賦值目錄裏的文件及目錄

如:xcopy f:\a f:\b

以後就用這種風格來bb寫代碼的過程了

java調用copy復制子文件夾及文件到指定目錄(非xcopy)