• 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 }

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

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

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

    路漫漫其修远兮,吾将上下而求索
  • 相关阅读:
    使用自己的key对app进行签名
    pl/sql中文乱码解决办法
    Oracle存储过程中创建表的权限
    pl/sql中获得sql语句执行后影响的行数
    申请Android Map APIKey
    vs快捷键
    ODAC安装配置与使用详解
    .net不安装Oracle11g客户端直接使用ODAC
    android通过USB使用真机调试程序
    pl/sql中实现字符串分割
  • 原文地址:https://www.cnblogs.com/-brl/p/7414164.html
Copyright © 2020-2023  润新知