`

java 实现文件/文件夹复制、剪切、删除

 
阅读更多
package com.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * Java实现文件复制、剪切、删除操作
 * 文件指文件或文件夹
 * 文件分割符统一用"//"
 */

public class FileOperateDemo {

	/**
	 * 复制文件或文件夹
	 * 
	 * @param srcPath
	 * @param destDir
	 *            目标文件所在的目录
	 * @return
	 */
	public static boolean copyGeneralFile(String srcPath, String destDir) {
		boolean flag = false;
		File file = new File(srcPath);
		if (!file.exists()) {
			System.out.println("源文件或源文件夹不存在!");
			return false;
		}
		if (file.isFile()) { // 源文件
			System.out.println("下面进行文件复制!");
			flag = copyFile(srcPath, destDir);
		} else if (file.isDirectory()) {
			System.out.println("下面进行文件夹复制!");
			flag = copyDirectory(srcPath, destDir);
		}

		return flag;
	}

	/**
	 * 复制文件
	 * 
	 * @param srcPath
	 *            源文件绝对路径
	 * @param destDir
	 *            目标文件所在目录
	 * @return boolean
	 */
	private static boolean copyFile(String srcPath, String destDir) {
		boolean flag = false;

		File srcFile = new File(srcPath);
		if (!srcFile.exists()) { // 源文件不存在
			System.out.println("源文件不存在");
			return false;
		}
		// 获取待复制文件的文件名
		String fileName = srcPath
				.substring(srcPath.lastIndexOf(File.separator));
		String destPath = destDir + fileName;
		if (destPath.equals(srcPath)) { // 源文件路径和目标文件路径重复
			System.out.println("源文件路径和目标文件路径重复!");
			return false;
		}
		File destFile = new File(destPath);
		if (destFile.exists() && destFile.isFile()) { // 该路径下已经有一个同名文件
			System.out.println("目标目录下已有同名文件!");
			return false;
		}

		File destFileDir = new File(destDir);
		destFileDir.mkdirs();
		try {
			FileInputStream fis = new FileInputStream(srcPath);
			FileOutputStream fos = new FileOutputStream(destFile);
			byte[] buf = new byte[1024];
			int c;
			while ((c = fis.read(buf)) != -1) {
				fos.write(buf, 0, c);
			}
			fis.close();
			fos.close();

			flag = true;
		} catch (IOException e) {
			//
		}

		if (flag) {
			System.out.println("复制文件成功!");
		}

		return flag;
	}

	/**
	 * 
	 * @param srcPath
	 *            源文件夹路径
	 * @param destPath
	 *            目标文件夹所在目录
	 * @return
	 */
	private static boolean copyDirectory(String srcPath, String destDir) {
		System.out.println("复制文件夹开始!");
		boolean flag = false;

		File srcFile = new File(srcPath);
		if (!srcFile.exists()) { // 源文件夹不存在
			System.out.println("源文件夹不存在");
			return false;
		}
		// 获得待复制的文件夹的名字,比如待复制的文件夹为"E://dir"则获取的名字为"dir"
		String dirName = getDirName(srcPath);
		// 目标文件夹的完整路径
		String destPath = destDir + File.separator + dirName;
		// System.out.println("目标文件夹的完整路径为:" + destPath);

		if (destPath.equals(srcPath)) {
			System.out.println("目标文件夹与源文件夹重复");
			return false;
		}
		File destDirFile = new File(destPath);
		if (destDirFile.exists()) { // 目标位置有一个同名文件夹
			System.out.println("目标位置已有同名文件夹!");
			return false;
		}
		destDirFile.mkdirs(); // 生成目录

		File[] fileList = srcFile.listFiles(); // 获取源文件夹下的子文件和子文件夹
		if (fileList.length == 0) { // 如果源文件夹为空目录则直接设置flag为true,这一步非常隐蔽,debug了很久
			flag = true;
		} else {
			for (File temp : fileList) {
				if (temp.isFile()) { // 文件
					flag = copyFile(temp.getAbsolutePath(), destPath);
				} else if (temp.isDirectory()) { // 文件夹
					flag = copyDirectory(temp.getAbsolutePath(), destPath);
				}
				if (!flag) {
					break;
				}
			}
		}

		if (flag) {
			System.out.println("复制文件夹成功!");
		}

		return flag;
	}

	/**
	 * 获取待复制文件夹的文件夹名
	 * 
	 * @param dir
	 * @return String
	 */
	private static String getDirName(String dir) {
		if (dir.endsWith(File.separator)) { // 如果文件夹路径以"//"结尾,则先去除末尾的"//"
			dir = dir.substring(0, dir.lastIndexOf(File.separator));
		}
		return dir.substring(dir.lastIndexOf(File.separator) + 1);
	}

	/**
	 * 删除文件或文件夹
	 * 
	 * @param path
	 *            待删除的文件的绝对路径
	 * @return boolean
	 */
	public static boolean deleteGeneralFile(String path) {
		boolean flag = false;

		File file = new File(path);
		if (!file.exists()) { // 文件不存在
			System.out.println("要删除的文件不存在!");
		}

		if (file.isDirectory()) { // 如果是目录,则单独处理
			flag = deleteDirectory(file.getAbsolutePath());
		} else if (file.isFile()) {
			flag = deleteFile(file);
		}

		if (flag) {
			System.out.println("删除文件或文件夹成功!");
		}

		return flag;
	}

	/**
	 * 删除文件
	 * 
	 * @param file
	 * @return boolean
	 */
	private static boolean deleteFile(File file) {
		return file.delete();
	}

	/**
	 * 删除目录及其下面的所有子文件和子文件夹,注意一个目录下如果还有其他文件或文件夹
	 * 则直接调用delete方法是不行的,必须待其子文件和子文件夹完全删除了才能够调用delete
	 * 
	 * @param path
	 *            path为该目录的路径
	 */
	private static boolean deleteDirectory(String path) {
		boolean flag = true;
		File dirFile = new File(path);
		if (!dirFile.isDirectory()) {
			return flag;
		}
		File[] files = dirFile.listFiles();
		for (File file : files) { // 删除该文件夹下的文件和文件夹
			// Delete file.
			if (file.isFile()) {
				flag = deleteFile(file);
			} else if (file.isDirectory()) {// Delete folder
				flag = deleteDirectory(file.getAbsolutePath());
			}
			if (!flag) { // 只要有一个失败就立刻不再继续
				break;
			}
		}
		flag = dirFile.delete(); // 删除空目录
		return flag;
	}

	/**
	 * 由上面方法延伸出剪切方法:复制+删除
	 * 
	 * @param destDir
	 *            同上
	 */
	public static boolean cutGeneralFile(String srcPath, String destDir) {
		if (!copyGeneralFile(srcPath, destDir)) {
			System.out.println("复制失败导致剪切失败!");
			return false;
		}
		if (!deleteGeneralFile(srcPath)) {
			System.out.println("删除源文件(文件夹)失败导致剪切失败!");
			return false;
		}

		System.out.println("剪切成功!");
		return true;
	}

	public static void main(String[] args) {
		copyGeneralFile("E://Assemble.txt", "E://New.txt"); // 复制文件
		copyGeneralFile("E://hello", "E://world"); // 复制文件夹
		deleteGeneralFile("E://onlinestockdb.sql"); // 删除文件
		deleteGeneralFile("E://woman"); // 删除文件夹
		cutGeneralFile("E://hello", "E://world"); // 剪切文件夹
		cutGeneralFile("E://Difficult.java", "E://Cow//"); // 剪切文件
	}

}

 

转载:http://hepeng-8.iteye.com/blog/1133844

分享到:
评论
2 楼 Mfeng 2016-11-24  
Mfeng 写道
评论竟然不能删除

1 楼 Mfeng 2016-11-24  
评论竟然不能删除

相关推荐

    java实现复制、粘贴、剪切、删除文件和文件夹

    java实现工具类实现复制、粘贴、剪切、删除文件和文件夹

    Java文件剪切.pdf

    Java文件剪切.pdf文件是一个关于Java语言实现文件复制、剪切、删除操作的文档。本文档提供了一个Java类FileOperateDemo,用于实现文件或文件夹的复制、剪切、删除操作。 Java文件操作 Java语言提供了多种方式来...

    java实现文件复制、剪切文件和删除示例

    \\ + fileName; File destFile = new File(destPath); try { if (destFile.exists()) { // 如果目标文件已存在 if (overwriteExistFile) { // 如果允许覆盖 // 删除旧文件 if (!... } // 文件剪切 public static void

    文件资源管理器.rar

    左侧以树形结构列出本机文件系统,根为“我的电脑”...右侧文件/文件夹支持右键菜单,以完成常用的文件/文件夹管理功能(复制、粘贴、删除、剪切、重命名等)。支持常用文件类型(文本、图片等)的预览。 用IDEA打开就好

    java 移动文件.

    Java 文件操作是 Java 编程语言中的一种基本操作,包括文件的移动、复制、删除、剪切等。下面是关于 Java 文件操作的知识点总结: 一、文件移动 文件移动是指将文件从一个目录下移到另一个目录下。在 Java 中,...

    JavaFile文件操作

    在本项目中,"JavaFile文件操作"着重介绍了如何使用`File`类进行文件的基本操作,包括创建文件、复制文件或文件夹、删除文件或文件夹以及剪切文件或文件夹。以下是对这些功能的详细说明: 1. **创建文件** 使用`...

    java File类字节流(复制、删除、剪切,下载)操作,多线程

    在本主题中,我们将深入探讨`File`类结合字节流如何实现文件和目录的操作,特别是复制、删除、剪切(重命名)以及多线程环境下的文件下载。 首先,让我们来看看`File`类的一些核心方法: 1. `createNewFile()`:...

    网上下载的文件管理工具

    4. **文件操作**:支持常见的文件操作,如复制、剪切、粘贴、重命名、删除和移动。 5. **同步与备份**:能自动或手动将文件同步到云存储服务,或在多台设备之间进行备份。 6. **文件分享**:便于通过电子邮件、...

    Windows批量去除多层文件夹冗余层空文件夹清理软件.exe

    当我们下载的大量文件,解压后发现一层套一层,真的很是烦恼,一个个的剪切、复制,真是烦不胜烦,有了这个小工具,就可以去除父文件夹内所有单文件夹,不管多少层,指导出现超过一个文件或文件夹。这个很简单,就不...

    java实用的io文件操作工具类,集成各种对文件操作的方法

    集成创建文件,创建目录,删除单个文件,删除单个目录,删除文件夹里内容,复制文件,复制文件夹,剪切文件,剪切文件夹等操作方法. 特上传分享

    java编写的控制台文件管理器

    剪切(移动)文件涉及`renameTo()`方法,但这个方法在跨越文件系统边界时可能不工作,此时需要先复制再删除源文件。 7. **异常处理**:文件操作可能出现各种异常,如`FileNotFoundException`,`IOException`等,...

    用SWT/JFace实现的资源管理器jExplorerV0.5(附源码)

    已实现简单的剪切/复制/粘贴功能(尚不能和外界程序交互) 2. 添加创建新文件夹功能 3. 添加选择全部/文件/文件夹功能 4. 增加对创建新文件夹,重命名,删除,粘贴操作的异常处理 5. FileUtil中增加...

    Android7.0 自定义文件管理器 获取文件夹路径

    用户需要能够选择、排序、搜索和执行其他操作(如复制、剪切、粘贴、删除)文件和目录。这需要实现点击事件监听器,可能还需要自定义动画和反馈。 8. 异步操作: 遍历文件系统和读取文件内容可能会耗时,因此建议...

    WEB在线文件管理 WEB在线文件管理

    用户可以通过系统创建新的文件或文件夹,进行文件的复制、粘贴、剪切操作,实现文件的位置移动或复制,还可以重命名文件,删除不需要的文件,以及将本地文件上传到服务器。这些功能是任何文件管理系统的基础,旨在...

    java课程设计-文件管理系统.doc

    - **复制**:能够将文件或文件夹复制到其他位置。 - **压缩与解压**:支持对文件或文件夹进行压缩和解压缩操作。 - **剪切**:允许用户移动文件或文件夹到另一个位置。 - **删除**:提供安全的删除功能,确保不会...

    android 文件管理器实现

    本文将详细讲解如何实现一个基础的Android文件管理器,涵盖文件夹浏览、文件拷贝复制等功能。 首先,我们需要创建一个新的Android项目,并在`AndroidManifest.xml`中添加必要的权限,如读写权限: ```xml ...

    Java资源管理器

    9. **剪贴板操作**:Java的Clipboard类支持复制、剪切和粘贴操作,使得文件和文件夹可以在不同的位置之间移动或复制。 10. **国际化和本地化**:为了适应不同地区的用户,资源管理器可能实现了国际化(i18n)和本地...

    android文件系统浏览器

    这包括浏览文件夹内容,支持上一级目录返回,以及对文件进行基本的操作,如打开、复制、剪切、粘贴、重命名和删除。此外,深度文件夹跳转功能允许用户探索文件系统的深层结构,这对于查找和管理深层次的文件至关重要...

Global site tag (gtag.js) - Google Analytics