`

递归拷贝/删除文件/文件夹:

    博客分类:
  • j2se
 
阅读更多

递归拷贝/删除文件/文件夹:

package cn.syswin.copy;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicLong;

public class CopyFiles {

	private static AtomicLong delFileCount = new AtomicLong(0);
	private static AtomicLong copyFileCount = new AtomicLong(0);

	public static void main(String[] args) throws Exception {
		long start = System.currentTimeMillis();
		copyFiles("D:\\WorkSpace\\Test\\aa", "D:\\WorkSpace\\Test\\ee");
//		deleteFiles("D:\\WorkSpace\\Test\\ee");
		System.out.println("总耗时(分钟): " + ((System.currentTimeMillis() - start) / 1000 / 60));
	}

	// 拷贝文件夹
	public static void copyFiles(String originPath, String destPath) throws Exception {
		File file = new File(originPath);
		if (file.isDirectory()) {
			File f = new File(destPath);
			if (!f.exists()) {
				System.out.println(copyFileCount.incrementAndGet() + " " + f.toString());
				f.mkdir();
			}
			File[] files = file.listFiles();
			for (File file2 : files) {
				copyFiles(file2.toString(), destPath + File.separator + file2.getName());
			}
		} else {
			copy(originPath, destPath);
		}
	}

	// 拷贝单个文件
	public static void copy(String originPath, String destPath) throws IOException {
		File originFile = new File(originPath);
		File destFile = new File(destPath);
		if(!destFile.exists() || originFile.length() != destFile.length()) { // 如果文件不存在或文件大小不一样则拷贝
			System.out.println(copyFileCount.incrementAndGet() + " " + destPath + " [" +  originFile.length() + " " + destFile.length() + "]"); // + originPath + " >>> "
			DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(originFile)));
			byte[] data = new byte[in.available()];
			in.read(data);
			DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(destFile)));
			out.write(data);
			out.flush();
			in.close();
			out.close();
		}
	}

	// 删除指定文件夹的所有文件及根文件夹
	public static void deleteFiles(String path) {
		File f = new File(path);
		if (f.isDirectory()) {
			File[] file = f.listFiles();
			for (File file2 : file) {
				deleteFiles(file2.toString());
			}
		}
		deleteFile(f);
	}

	public static void deleteFile(File file) {
		if (file.exists()) {
			System.out.println(delFileCount.incrementAndGet() + " " + file.toString());
			file.delete();
		}
	}

}

 

分享到:
评论

相关推荐

    递归删除,复制文件夹

    简单的递归删除文件,递归拷贝文件。欢迎交流

    FileUploadUtil.java(文件上传工具类)

    删除文件夹,递归删除目录下的所有文件及子目录下所有文件,函数名:getFile 作用:使用递归,输出指定文件夹内的所有文件 参数:path:文件夹路径 前置空格缩进,显示文件层次结构,通过文件名称获取导入文件到temp...

    文件操作类,包含常用的文件操作方法

    封装了包括所有常用的文件操作方法如:读文件,写文件,查看文件夹大小,树状展示文件夹中文件目录,拷贝文件,复制文件,删除文件,创建文件,递归删除文件夹中文件,获取指定文件属性

    c#文件操作基类(涵盖基本操作)

    递归删除文件夹目录及文件; 将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错; 获取指定文件夹下所有子目录及文件(树形); 获取指定文件夹下所有子目录及文件函数; 获取指定...

    2.指定一个路径,将其下面(含子文件夹中)的以".txt"结尾的文件移动到指定的另一个路径下;

    2.指定一个路径,将其下面(含子文件夹中)的以".txt"结尾的文件移动到指定的另一个路径下;

    将源文件夹下所有的jpg格式文件复制到目的文件夹

    删除目的文件夹中所有的文件。支持重置,停止。 1.文件夹选择。 2.文件夹遍历。 3.文件复制。 4.文件删除。 5.函数递归。 6.按钮文字的改变及改变按钮是否可用的属性。 7.进度条的使用。 8.程序无响应的优化。

    Csharp文件操作全收录

    目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件、指定文件夹下面的所有内容copy到目标文件夹下面、指定文件夹下面的所有内容Detele、读取文本...

    苹果系统 终端命令 Mac 命令

    参数R表示对目录进行递归操作,kext在图形界面下看起来是个文件,实际上是个文件夹。 把驱动目录下的所有文件备份到桌面backup cp -R /System/Library/Extensions/* /User/用户名/Desktop/backup 删除文件 rm 参数...

    C#文件操作

    该文档总结了使用C#语言实现操作文件的各种方法,包括C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件、指定文件夹下面的所有内容copy到目标文件夹下面、指定文件夹下面的所有内容Detele、读取文本...

    C# 文件操作

    该文档总结了使用C#语言实现文件操作的各类方法,包括C#追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件、指定文件夹下面的所有内容copy到目标文件夹下面、指定文件夹下面的所有内容Detele、读取文本...

    FTP递归扫描文件到本地代码(Java)

    实现从ftp服务器某一目标文件夹开始入口,扫描所有子文件夹和子文件夹下的文件,如果存在文件,则拷贝至本地某目录下,并删除FTP服务器上该文件。如果不存在文件,则删除该文件夹,但是入口目标文件夹不删除。

    (全)传智播客PHP就业班视频完整课程

    9-24 3.php文件编程②-如何写文件 拷贝文件 创建和删除(文件夹、文件) 9-24 4.php文件编程③-文件的上传和下载 文件上传细节讨论 9-24 5.php文件编程④-mini文件共享网实现分析 9-24 6.PHP绘图技术 9-26 1 课程回顾 ...

    源代码行统计工具2.0(VC)

    2. 程序支持文件夹递归遍历,可以将所有叶子节点的路径提取出来统计,因此统计代码行的时候只需要指定项目文件根目录即可,不再需要将待统计的代码拷贝到指定目录下; 3. 程序采用分层的设计方案,模型层和视图层...

    入门学习Linux常用必会60个命令实例详解doc/txt

    文件为doc版,可自行转成txt,在手机上看挺好的。 本资源来自网络,如有纰漏还请告知,如觉得还不错,请留言告知后来人,谢谢!!!!! 入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供...

    SVN使用手册中文版快速入门

    拷贝覆盖你的工作文件 下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup ...

    java源码包---java 源码 大量 实例

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    java源码包2

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码...

    WinRAR_4.0.exe

    d 从压缩文件中删除文件。请注意,如果这个命令导致压缩文件中所有文件 全部删除,这个空的压缩文件将被删除。 e 解压文件到当前目录。 f 更新压缩文件中的文件。 更新打包到压缩文件后被改变的文件。这个...

    SVN使用手册中文版.chm

    拷贝覆盖你的工作文件 下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup ...

Global site tag (gtag.js) - Google Analytics