`

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

    博客分类:
  • 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();
		}
	}

}

 

分享到:
评论

相关推荐

    C#复制文件夹(及文件夹下所有子文件夹和文件)

    为了实现文件夹及其子文件夹和文件的完整复制,我们需要采取递归的方法,即首先复制顶级目录,然后递归地复制每个子目录及其包含的所有文件和子目录。 ##### 2.2 具体实现 根据给定的部分代码,我们可以看到已经...

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件

    - **文件删除**:调用`boolean delete(Path p, boolean recursive)`,其中`recursive`参数决定是否递归删除目录。 - **文件遍历**:使用`FileStatus[] listStatus(Path f)`获取目录下所有文件的状态,再遍历这些状态...

    C#判断一个文件夹内是否存在子文件夹或文件

    通过以上分析,我们不仅了解了如何使用C#来判断一个文件夹内是否存在子文件夹或文件,还深入探讨了目录拷贝与删除的具体实现方式。这些知识点对于处理文件系统相关的任务非常有用,能够帮助开发者更加高效地管理文件...

    Windows下C语言实现文件、文件夹的复制删除命令

    本文将深入探讨如何使用C语言实现文件和文件夹的复制与删除功能,而非依赖于DOS的DEL和COPY命令。我们将讨论Windows API接口,以及如何利用它们来实现支持通配符、目录树操作和强制/非强制操作的高级功能。 首先,...

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

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

    C# 文件夹的拷贝与删除案例源码

    文件夹的拷贝通常涉及到递归操作,因为一个文件夹可能包含多个子文件夹和文件。`System.IO.DirectoryInfo`类提供了`CopyTo`方法,可以用来复制整个目录结构。以下是一个简单的文件夹拷贝示例: ```csharp using ...

    C#拷贝整个文件夹及子目录和其中文件的方法

    然后,方法分为两部分,一部分处理文件的拷贝,一部分处理子目录的递归拷贝。在拷贝文件的过程中,使用了`Path.GetExtension`方法排除特定后缀的文件,并通过`File.Copy`方法执行实际的文件拷贝操作。 这些方法在...

    QT实现文件夹和文件的复制粘贴.docx

    为了实现文件夹的复制,可以使用递归函数qCopyDirectory,该函数将源文件夹的所有文件和子文件夹复制到目标文件夹中。 函数qCopyDirectory的原型为: ```c bool qCopyDirectory(const QDir& fromDir, const QDir& ...

    Java拷贝文件夹和删除文件夹代码实例

    在上面的代码中,我们首先判断目标文件是否是一个文件夹,如果是文件夹,我们则递归地删除文件夹中的所有文件和子文件夹,然后删除文件夹本身。 Java拷贝文件夹和删除文件夹代码实例提供了一个基本的文件夹操作方法...

    Python实现拷贝/删除文件夹的方法详解

    在Python编程中,管理和操作文件和文件夹是常见的任务,包括拷贝和删除。下面将详细解释如何使用Python实现这两个功能,特别是在处理文件夹时。 首先,我们来看如何拷贝文件夹。Python提供了`shutil`模块,其中的`...

    文件夹拷贝

    在Java编程语言中,"文件夹拷贝"是一项...通过递归遍历目录和使用流操作拷贝文件,我们可以轻松地在不同位置之间移动或复制文件夹结构。这个过程在软件开发中是不可或缺的,尤其是在涉及到大量数据转移或备份的场景下。

    create--delete-copy-file.zip_拷贝文件夹

    5. **深度拷贝文件夹**:文件夹的拷贝不仅仅是拷贝顶层文件,还需要递归地拷贝所有子目录和文件。Python的`shutil.copytree()`函数可实现这一功能,它会创建目标目录结构,并复制所有文件和子目录。 6. **文件加密...

    vc实现文件夹从一个目录下拷贝到另一个目录

    ### VC实现文件夹从一个目录下拷贝到另一个目录 #### 概述 在软件开发过程中,经常需要处理文件及文件夹的操作,如复制、移动等。本文将详细介绍如何使用Visual C++(简称VC)来实现文件夹从一个目录复制到另一个...

    MFC文件拷贝程序MFC文件拷贝程序

    MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序开发。它封装了许多Windows API,使得...在实际项目中,你还可以根据需要扩展功能,比如添加文件夹递归拷贝、多文件批量拷贝等。

    QT实现文件和文件夹的复制粘贴.pdf

    文件夹复制的实现则更加复杂,这里定义了一个名为`qCopyDirectory`的函数,它负责递归地复制文件夹中的所有内容,包括子文件夹和文件。 此函数接收四个参数:源目录`fromDir`、目标目录`toDir`、一个布尔值`...

    C#.net文件及文件夹的操作

    本文将详细介绍如何使用C#进行文件及文件夹的相关操作,包括追加文件、拷贝文件、删除文件、移动文件、创建目录以及递归删除文件夹。 1. 追加文件: 在C#中,可以使用`StreamWriter`类的`AppendText`方法来追加内容...

    java管理hdfs文件和文件夹项目hadoop2.4

    本文将深入探讨使用Java管理HDFS文件和文件夹的关键知识点,特别是基于Hadoop 2.4版本。 首先,理解HDFS的基础概念至关重要。HDFS是一种分布式文件系统,设计用于跨大量廉价硬件节点存储和处理大数据。它遵循主从...

    Copy文件夹下面所有文件

    综上所述,“Copy文件夹下面所有文件”的实现不仅涉及基本的文件和目录操作,还需要理解递归处理以及如何适当地管理文件属性。希望这些知识点能帮助您更好地理解和掌握文件操作的相关技术细节。

    java文件夹的拷贝

    我们将基于给定的"java文件夹的拷贝"主题,以及提供的`copyFile.java`源码文件,来详细讲解相关知识点。 首先,我们需要理解Java I/O流的概念。在Java中,文件和目录的操作主要依赖于`java.io`和`java.nio`这两个...

Global site tag (gtag.js) - Google Analytics