按文件时间小到大排序 文件复制剪切
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.Arrays;import java.util.Comparator;public class FileUtil {//按文件时间小到大排序pub
·
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
public class FileUtil {
//按文件时间小到大排序
public static File[] orderByDate(String filePath) {
File file = new File(filePath);
File[] files = file.listFiles();
Arrays.sort(files, new Comparator<File>() {
public int compare(File f1, File f2) {
long diff = f1.lastModified() - f2.lastModified();
if (diff > 0)
return 1;
else if (diff == 0)
return 0;
else
return -1;//如果 if 中修改为 返回-1 同时此处修改为返回 1 排序就会是递减
}
public boolean equals(Object obj) {
return true;
}
});
return files;
// for (int i = 0; i < files.length; i++) {
// System.out.println(files[i].getName());
// System.out.println(new Date(files[i].lastModified()));
// }
}
/**
* 复制文件或文件夹
*
* @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;
}
// 获取待复制文件的文件名
File file = new File(srcPath);
String fileName = file.getName();
String destPath = destDir +File.separator + 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
* //目标文件夹所在目录
* @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;
}
}

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)