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
分享到:
相关推荐
java实现工具类实现复制、粘贴、剪切、删除文件和文件夹
主要介绍了java实现文件复制、剪切文件和删除示例,需要的朋友可以参考下
左侧以树形结构列出本机文件系统,根为“我的电脑”...右侧文件/文件夹支持右键菜单,以完成常用的文件/文件夹管理功能(复制、粘贴、删除、剪切、重命名等)。支持常用文件类型(文本、图片等)的预览。 用IDEA打开就好
当我们下载的大量文件,解压后发现一层套一层,真的很是烦恼,一个个的剪切、复制,真是烦不胜烦,有了这个小工具,就可以去除父文件夹内所有单文件夹,不管多少层,指导出现超过一个文件或文件夹。这个很简单,就不...
集成创建文件,创建目录,删除单个文件,删除单个目录,删除文件夹里内容,复制文件,复制文件夹,剪切文件,剪切文件夹等操作方法. 特上传分享
已实现简单的剪切/复制/粘贴功能(尚不能和外界程序交互) 2. 添加创建新文件夹功能 3. 添加选择全部/文件/文件夹功能 4. 增加对创建新文件夹,重命名,删除,粘贴操作的异常处理 5. FileUtil中增加...
该类主要用于熟悉File类的方法,实现的功能: 1、创建文件 2、复制文件(或文件件) 3、删除文件(或文件夹) 4、剪切文件(或文件夹)
文件夹里,然后在复制到手机的其他文件夹就可以了,在手机的其他文件里你会看到一个JAD 文件和一个JAR的文件,这样的话JAD和JAR文件都已经具备了,下面就可以安装了! 4.替换补丁 有的软件的压缩包里还有几个软件名...
文件操作,新建复制移动删除重命名 打开文件,自定义文件类型打开文件 读取apk文件的图标 自定义selector实现ImageView点击时换背景 文件类型只识别3种, 文件夹,app安装包,其他文件, 有删除,只确认一次, 有...
JAR:Java档案文件(一种用于applet和相关文件的压缩文件) JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形文件 JS:javascript源文件 JSP:HTML网页,其中包含有对一个Java servlet...
剪贴板功能:复制,剪切,粘贴,清除 可选的文件和文件夹支持(鼠标拖动和Ctrl键) 对选定文件和文件夹的多种操作支持:移动,删除,下载 之前和之后回调函数的某些操作 双击或单击设置以打开文件和文件夹 延迟加载...
'复制或剪切文件 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 2.0和JDK 8开发的文件浏览器仅用于教育目的。... 它能够浏览文件和文件夹,以及打开,重命名,删除,复制,剪切和粘贴它们。 它使用执行某些操作,并且目前没有其他依赖项。 屏幕截图
您还可以使用项目资源管理器创建多个项目,删除,重命名,剪切和复制项目文件夹中的多个文件和文件夹。 可以编译和执行的编程语言包括: C,C ++,Java,Java applet,C图形,HTML,CSS,JavaScript和XML。 如果您...
2、凡是用Anyview打开看过的,再去删除,手机就会提示“打开文件",没打开过的就能删掉。(三星) 3、E770上复制粘贴功能无效 [2007.11.18] Ver:3.1.25 当键盘映射选择为其它时,用户可以自己更改按键的值,对于全键盘...
具体调用方法请参考演示文件夹中的demo9 submitID:触发表单提交的按钮ID值 参数值:表单提交按钮的ID值,默认在form表单上绑定submit以同步结果 说明:通过本参数,在非标准submit提交环境下,比如AJAX提交,可以由...
(*提示: 由于我们就于教程所以涉及的内容比较少, 但当正式制作的时候文件的命名和文件夹的命名是相当讲究了, 因为东西多了不整理清楚的话, 效率会受影响, 这也是一种习惯, 任何事总有他变繁杂的时候, 莫要等到了...