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文件剪切.pdf文件是一个关于Java语言实现文件复制、剪切、删除操作的文档。本文档提供了一个Java类FileOperateDemo,用于实现文件或文件夹的复制、剪切、删除操作。 Java文件操作 Java语言提供了多种方式来...
\\ + fileName; File destFile = new File(destPath); try { if (destFile.exists()) { // 如果目标文件已存在 if (overwriteExistFile) { // 如果允许覆盖 // 删除旧文件 if (!... } // 文件剪切 public static void
左侧以树形结构列出本机文件系统,根为“我的电脑”...右侧文件/文件夹支持右键菜单,以完成常用的文件/文件夹管理功能(复制、粘贴、删除、剪切、重命名等)。支持常用文件类型(文本、图片等)的预览。 用IDEA打开就好
Java 文件操作是 Java 编程语言中的一种基本操作,包括文件的移动、复制、删除、剪切等。下面是关于 Java 文件操作的知识点总结: 一、文件移动 文件移动是指将文件从一个目录下移到另一个目录下。在 Java 中,...
在本项目中,"JavaFile文件操作"着重介绍了如何使用`File`类进行文件的基本操作,包括创建文件、复制文件或文件夹、删除文件或文件夹以及剪切文件或文件夹。以下是对这些功能的详细说明: 1. **创建文件** 使用`...
在本主题中,我们将深入探讨`File`类结合字节流如何实现文件和目录的操作,特别是复制、删除、剪切(重命名)以及多线程环境下的文件下载。 首先,让我们来看看`File`类的一些核心方法: 1. `createNewFile()`:...
4. **文件操作**:支持常见的文件操作,如复制、剪切、粘贴、重命名、删除和移动。 5. **同步与备份**:能自动或手动将文件同步到云存储服务,或在多台设备之间进行备份。 6. **文件分享**:便于通过电子邮件、...
当我们下载的大量文件,解压后发现一层套一层,真的很是烦恼,一个个的剪切、复制,真是烦不胜烦,有了这个小工具,就可以去除父文件夹内所有单文件夹,不管多少层,指导出现超过一个文件或文件夹。这个很简单,就不...
集成创建文件,创建目录,删除单个文件,删除单个目录,删除文件夹里内容,复制文件,复制文件夹,剪切文件,剪切文件夹等操作方法. 特上传分享
剪切(移动)文件涉及`renameTo()`方法,但这个方法在跨越文件系统边界时可能不工作,此时需要先复制再删除源文件。 7. **异常处理**:文件操作可能出现各种异常,如`FileNotFoundException`,`IOException`等,...
已实现简单的剪切/复制/粘贴功能(尚不能和外界程序交互) 2. 添加创建新文件夹功能 3. 添加选择全部/文件/文件夹功能 4. 增加对创建新文件夹,重命名,删除,粘贴操作的异常处理 5. FileUtil中增加...
用户需要能够选择、排序、搜索和执行其他操作(如复制、剪切、粘贴、删除)文件和目录。这需要实现点击事件监听器,可能还需要自定义动画和反馈。 8. 异步操作: 遍历文件系统和读取文件内容可能会耗时,因此建议...
用户可以通过系统创建新的文件或文件夹,进行文件的复制、粘贴、剪切操作,实现文件的位置移动或复制,还可以重命名文件,删除不需要的文件,以及将本地文件上传到服务器。这些功能是任何文件管理系统的基础,旨在...
- **复制**:能够将文件或文件夹复制到其他位置。 - **压缩与解压**:支持对文件或文件夹进行压缩和解压缩操作。 - **剪切**:允许用户移动文件或文件夹到另一个位置。 - **删除**:提供安全的删除功能,确保不会...
本文将详细讲解如何实现一个基础的Android文件管理器,涵盖文件夹浏览、文件拷贝复制等功能。 首先,我们需要创建一个新的Android项目,并在`AndroidManifest.xml`中添加必要的权限,如读写权限: ```xml ...
9. **剪贴板操作**:Java的Clipboard类支持复制、剪切和粘贴操作,使得文件和文件夹可以在不同的位置之间移动或复制。 10. **国际化和本地化**:为了适应不同地区的用户,资源管理器可能实现了国际化(i18n)和本地...
这包括浏览文件夹内容,支持上一级目录返回,以及对文件进行基本的操作,如打开、复制、剪切、粘贴、重命名和删除。此外,深度文件夹跳转功能允许用户探索文件系统的深层结构,这对于查找和管理深层次的文件至关重要...