zoukankan      html  css  js  c++  java
  • 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 }

    这样就可以连带子目录和文件一起复制了,测试过没毛病的。

    其实早上也写的差不多,但是写的有点乱,中午吃完饭回来在那改,改到上课还是没改完。。

    课上完还是在那改。。。改得超级烦,因为思路都短路了,都不知道自己在改什么代码看起来实在有点乱(佩服自己写的代码)

    路漫漫其修远兮,吾将上下而求索
  • 相关阅读:
    CodeForces 706C Hard problem
    CodeForces 706A Beru-taxi
    CodeForces 706B Interesting drink
    CodeForces 706E Working routine
    CodeForces 706D Vasiliy's Multiset
    CodeForces 703B Mishka and trip
    CodeForces 703C Chris and Road
    POJ 1835 宇航员
    HDU 4907 Task schedule
    HDU 4911 Inversion
  • 原文地址:https://www.cnblogs.com/-brl/p/7414164.html
Copyright © 2011-2022 走看看