因为作所以烦因为烦所以快乐...(为什么不先查一下有没有现成的命令,后悔啊!!)

不知道有xcopy这个命令就自己想写个复制子目录和文件的功能。。。以下故事诞生了

是这样的,昨天在学校弄的半成品,半成品弄完晚上就跟朋友打cf了。。。他是个会带队团灭的牛逼人物!!

然后隔天早上去学校就拿半成品测试了一下,发现直接用copy只能复制文件啊,不能直接复制子目录里的文件(目录指的是文件夹,子目录就是文件夹里面还有文件夹当然也有可能是文件)。。。。。那怎么搞???纠结了一下,就开始把半成品稍微改了一下,似乎没什么卵用。。

然后就在那听歌,在想,在发呆。。(厉害了我的哥),那位团灭的牛逼人物还时不时来跟我说话,就这样一上午过去了。。。

然后就去吃饭了,反正一早上就想了一个大概的思路。

首先要知道:目录里有n个文件,n个目录;n个目录里又有n个文件及n个目录以此类推没完没了的(没完没了是假的夸张一点而已)

我是这样想的:

1.判断如果是文件直接复制到目标目录,如果是目录就保存到集合,保存的同时在目标目录先创建好要复制的目录

if(是目录){

在目标文件夹创建要复制的文件夹

路径保存到集合

}esel{

执行copy命令进行赋值

}

2.刚刚也说了目录里有可能有n个文件和n个子目录很多种可能(自己想想)

那么我只要再加个循环遍历这个集合里的目录,再进行一次判断,如果是文件还是跟第一次一样直接复制到目标目录

如果是目录继续保存到集合

大概这样写:

if(是目录){

在目标文件夹创建要复制的文件夹

路径保存到集合

for(int i=0...){

if(是目录){

在目标文件夹创建要复制的文件夹

保存到集合

}else{

直接复制过去

}

}

}else{

执行copy命令进行赋值

}

大概思路就是这样子。

贴上代码:

 package com.d9.util;

 import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; public class dosCopyTest { public static void main(String[] args) throws IOException {
String path="f:\\test1";
String targetPath="f:\\copytest";
File file1=new File(path);
File file2=new File(targetPath);
file2.mkdirs();
String strname []=file1.list();
Runtime run=Runtime.getRuntime();
Process p=null;
List<String> lpath=new ArrayList<String>();
for(String fn:strname) {
file2=new File(path+"\\"+fn);
if(file2.isDirectory()) {
new File(targetPath+"\\"+fn).mkdirs();
lpath.add("\\"+fn+"\\");
for(int i=0;i<lpath.size();i++) {
file2=new File(path+lpath.get(i));
String strname1 []=file2.list();
for(String fn1:strname1) {
if(new File(path+lpath.get(i)+fn1).isDirectory()) {
new File(targetPath+lpath.get(i)+fn1).mkdirs();
lpath.add(lpath.get(i)+fn1+"\\");
}else {
p=run.exec("cmd /c copy "+path+lpath.get(i)+fn1+" "+targetPath+lpath.get(i)+fn1);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}
}else {
p=run.exec("cmd /c copy "+path+"\\"+fn+" "+targetPath+"\\"+fn);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}
}

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

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

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

java调用copy复制子文件夹及文件到指定目录(非xcopy)的更多相关文章

  1. 不需要写代码,文件夹右键cmd定位指定目录

    引子 这篇文章其实本来不是这样的,因为我用C#的代码实现了一个程序,后面才突然发现,我太傻太天真了,明明不需要写程序和写代码的,结果自己把自己二住了. 我们来看看效果图. 由于,我自己的原因,这个功能 ...

  2. Java删除文件夹和文件

    转载自:http://blog.163.com/wu_huiqiang@126/blog/static/3718162320091022103144516/ 以前在javaeye看到过关于Java操作 ...

  3. JAVA调用C语言写的SO文件

    JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 // 用JNI实现 // 实例: ...

  4. 【转】Java删除文件夹和文件

    原文网址:http://kxjhlele.iteye.com/blog/323657 以前在javaeye看到过关于Java操作文件的一篇文章,写的很好,但找了半天也没找到,就把找到底几篇文章整理一下 ...

  5. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  6. python调用另一个文件中的代码,pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题

    如何调用另一个python文件中的代码无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等, ...

  7. 递归遍历磁盘下的某一文件夹中所有文件,并copy文件生成文件和带文件夹的文件

    package com.hudong.test; import java.io.File; import java.io.IOException; import java.util.ArrayList ...

  8. Java实现文件夹下文件实时监控

    一.commons-io方法 1.使用Commons-io的monitor下的相关类可以处理对文件进行监控,它采用的是观察者模式来实现的 (1)可以监控文件夹的创建.删除和修改 (2)可以监控文件的创 ...

  9. java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询

    java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询 有时候我们遇到需要查询服务器或者本机某个路径下有哪些文件?或者根据文件名称模糊搜索文件,那么就可以使用本方法:可以获取某个路径下所有文件 ...

随机推荐

  1. @RequestParam与@PathVariable的区别

    在spring MVC中,两者的作用都是将request里的参数的值绑定到contorl里的方法参数里的,区别在于,URL写法不同. 使用@RequestParam时,URL是这样的:http://h ...

  2. Vue--props

    组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,我们需要通过子组件的 props 选项. 字面量语法 vs 动态语法 初学者常犯 ...

  3. python编程快速上手之第3章实践项目参考答案

    1 #!/usr/bin/env python 2 # coding:utf-8 3 # write by mfyang 4 # collatz.py 5 # 从用户读入一个值,并判断这个值是不是一个 ...

  4. 解决win10系统以太网适配器的驱动程序可能出现问题

    插上网线显示未连接-连接可用,连上无线显示未连接-连接不可用,右下角显示感叹号 ,以太网和无线属性显示ipv4未连接详细信息为空,在设备管理器里卸载网卡驱动重装上仍然没有,通过windoes自带的网络 ...

  5. MySql单表最大8000W+ 之数据库遇瓶颈记

    前言 昨晚救火到两三点,早上七点多醒来,朦胧中醒来发现电脑还开着,赶紧爬起来看昨晚执行的SQL命令结果.由于昨晚升级了阿里云的RDS,等了将近两个小时 还在 升降级中,早上阿里云那边回复升级过程中出现 ...

  6. Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎

    前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...

  7. IntentService与Service的区别

    IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统的Service一样,同时,当任务执行 ...

  8. 使用express, create-react-app, mongodb搭建react模拟数据开发环境

    提要 最近刚刚完成了一个vue的项目,其中涉及的用户数有6000多个以及其他数据也比较多,为了在前端能够真实的进行数据模拟,所有把全量数据拷贝下来放到了api.json中.这样导致整个api.json ...

  9. AddDigitsTotal - 把数字中单个数相加

    给定一个int数字,把数字中的单个数相加起来:得到的结果如果不是个位数,继续相加 如给定 19,执行1+9 = 10 --> 1 + 0 = 1  返回1 给定22,返回4 思路很简单,把各个位 ...

  10. SQL Server 数据库表的管理

    上一篇文章简单梳理了一下SQL Server数据库的安装和基本操作,这篇文章主要讲述一下数据库表的管理 一.数据库的创建 有关数据库的创建有两种方式,一种是通过视图创建,第二种就是通过T-SQL语句来 ...