因为作所以烦因为烦所以快乐...(为什么不先查一下有没有现成的命令,后悔啊!!)
不知道有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 }
这样就可以连带子目录和文件一起复制了,测试过没毛病的。
其实早上也写的差不多,但是写的有点乱,中午吃完饭回来在那改,改到上课还是没改完。。
课上完还是在那改。。。改得超级烦,因为思路都短路了,都不知道自己在改什么代码看起来实在有点乱(佩服自己写的代码)