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 }

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

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

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

 

转载于:https://www.cnblogs.com/-brl/p/7414164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用BAT批处理实现循环读取TXT文件,并对其中每行内容进行操作,可以使用FOR命令。FOR命令可以遍历指定文件目录,并对每个文件目录执行相应的操作。 首先,需要在BAT批处理中使用FOR /F命令来逐行读取TXT文件。示例如下: for /f "tokens=*" %%a in (filename.txt) do ( REM 针对每个循环中读取的行执行操作 ) 这里,tokens=*表示读取整行内容并将其存储到变量%%a中。接下来,在do后面的括号里,可以编写针对每行内容的操作。比如,可以使用xcopy命令来复制对应的文件夹文件。示例如下: xcopy /s /e /y "%%a" "目标文件夹路径" 这里,/s表示复制包括目录在内的所有文件,/e表示复制包括空目录在内的所有文件,/y表示覆盖目标文件而不提示确认。将上述代码放入FOR命令中,即可实现读取指定TXT文件复制其中所有对应文件夹文件的功能。 ### 回答2: 在bat批处理中,我们可以使用for循环来实现读取txt中每行内容并执行对应的操作。具体的步骤如下: 1. 首先需要定义一个变量,用于存储txt文件的路径,例如: set path=C:\test\filelist.txt 2. 接着使用for循环读取txt文件的每一行内容,例如: for /f "tokens=* delims=" %%a in (%path%) do ( 3. 在for循环中,我们可以使用if语句判断当前行的内容是文件夹还是文件,并执行对应的操作,例如: if exist "%%a\" ( xcopy "%%a\" "C:\test\backup\" /s /e ) else ( xcopy "%%a" "C:\test\backup\" /s /e ) 上述代码中,如果当前行的内容是文件夹,则使用xcopy命令将对应文件夹复制指定路径,如果当前行的内容是文件,则直接复制文件。/s和/e参数表示复制文件夹及其文件夹,并将空文件夹一并复制。 4. 最后,在for循环结束后可以添加一行echo语句提示复制完成,例如: echo 复制完成! 通过上述步骤,我们就可以实现在bat批处理中循环读取txt文件复制对应的文件夹文件。 ### 回答3: 实现该功能的bat批处理如下: @echo off set "source=C:\source" --要复制文件文件夹所在路径 set "dest=D:\dest" --目标路径 set "list=C:\list.txt" --txt文件路径,每行内容为要复制文件文件夹名称 for /f "delims=" %%a in (%list%) do ( if exist "%source%\%%a\*.*" ( robocopy "%source%\%%a" "%dest%\%%a" /e ) else if exist "%source%\%%a" ( copy "%source%\%%a" "%dest%\%%a" /y ) else ( echo %%a 不存在,请确认! ) ) 首先,设置要复制文件文件夹所在路径source,以及目标路径dest,这是后续复制操作的基础。 然后,设置txt文件路径list,通过for循环逐行读取txt文件内容,依次复制对应的文件文件夹。 如果txt文件中某一行表示文件夹,那么就调用robocopy命令来复制整个文件夹,其中/e代表递归复制。 如果txt文件中某一行表示文件,那么就调用copy命令来复制单个文件,其中/y表示不询问是否覆盖。 如果txt文件中某一行既不表示文件夹也不表示文件,那么就提示该行的内容不存在。 通过这样的批处理操作,可以实现批量复制文件文件夹的操作,并且可以通过txt文件灵活指定复制目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值