`

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实现文件复制、剪切文件和删除示例

    主要介绍了java实现文件复制、剪切文件和删除示例,需要的朋友可以参考下

    文件资源管理器.rar

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

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

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

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

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

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

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

    JavaFile文件操作

    该类主要用于熟悉File类的方法,实现的功能: 1、创建文件 2、复制文件(或文件件) 3、删除文件(或文件夹) 4、剪切文件(或文件夹)

     一.JAVA程序传送到手机的方法:

    文件夹里,然后在复制到手机的其他文件夹就可以了,在手机的其他文件里你会看到一个JAD 文件和一个JAR的文件,这样的话JAD和JAR文件都已经具备了,下面就可以安装了!  4.替换补丁  有的软件的压缩包里还有几个软件名...

    aidejava源码-FileManager:私人定制的文件管理器

    文件操作,新建复制移动删除重命名 打开文件,自定义文件类型打开文件 读取apk文件的图标 自定义selector实现ImageView点击时换背景 文件类型只识别3种, 文件夹,app安装包,其他文件, 有删除,只确认一次, 有...

    网管教程 从入门到精通软件篇.txt

    JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形文件 JS:javascript源文件 JSP:HTML网页,其中包含有对一个Java servlet...

    RichFilemanager:开源文件管理器。 最新PHP,Java,ASHX,ASP,NodeJs和Python 3 Flask。 欢迎捐款!-python source file

    剪贴板功能:复制,剪切,粘贴,清除 可选的文件和文件夹支持(鼠标拖动和Ctrl键) 对选定文件和文件夹的多种操作支持:移动,删除,下载 之前和之后回调函数的某些操作 双击或单击设置以打开文件和文件夹 延迟加载...

    fso浏览54646465465464564

    '复制或剪切文件 Sub SetFile(ByVal Fname,ByVal iMode) Session(mss & "setfile")=Fname Session(mss & "setmode")=iMode Dim ww If 0=iMode Then ww="复制" Else ww="剪切" End If EchoClose ww&"成功...

    UXplore:用JavaFX创建的文件浏览器

    UXplore文件浏览器 使用JavaFX 2.0和JDK 8开发的文件浏览器仅用于教育目的。... 它能够浏览文件和文件夹,以及打开,重命名,删除,复制,剪切和粘贴它们。 它使用执行某些操作,并且目前没有其他依赖项。 屏幕截图

    JCppEdit v4.0:最佳初学者IDE-开源

    您还可以使用项目资源管理器创建多个项目,删除,重命名,剪切和复制项目文件夹中的多个文件和文件夹。 可以编译和执行的编程语言包括: C,C ++,Java,Java applet,C图形,HTML,CSS,JavaScript和XML。 如果您...

    手机 pdf 阅读器

    2、凡是用Anyview打开看过的,再去删除,手机就会提示“打开文件",没打开过的就能删掉。(三星) 3、E770上复制粘贴功能无效 [2007.11.18] Ver:3.1.25 当键盘映射选择为其它时,用户可以自己更改按键的值,对于全键盘...

    xheditor-1.1.14

    具体调用方法请参考演示文件夹中的demo9 submitID:触发表单提交的按钮ID值 参数值:表单提交按钮的ID值,默认在form表单上绑定submit以同步结果 说明:通过本参数,在非标准submit提交环境下,比如AJAX提交,可以由...

    Flash格斗动画的动作设计和动作的制作.doc

    (*提示: 由于我们就于教程所以涉及的内容比较少, 但当正式制作的时候文件的命名和文件夹的命名是相当讲究了, 因为东西多了不整理清楚的话, 效率会受影响, 这也是一种习惯, 任何事总有他变繁杂的时候, 莫要等到了...

Global site tag (gtag.js) - Google Analytics