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


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

不知道有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 }

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM