標籤:size adl tar row 目錄 buffer package 直接 new
因為作所以煩因為煩所以快樂...(為什麼不先查一下有沒有現成的命令,後悔啊!!)
不知道有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)