java批量移动某个文件夹的文件到另外一个文件夹里面
·
package com.test.xxx;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class test {
static List<String> oks = new ArrayList<>();
static List<String> fails = new ArrayList<>();
public static void main(String[] args) throws InterruptedException {
// 这里根据电脑配置实际的线程数
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
// 源文件根路径
String baseDir = "C:\\Users\\Administrator\\Desktop";
// 移动目标文件根路径
String targetDir = "C:\\Users\\Administrator\\Desktop\\fj\\fj3";
// 开始获取源文件根下面的所有文件并处理
LinkedList<String> files = getAllFile(baseDir);
System.err.printf("检测到 %d 个文件需要处理!\n", files.size());
Thread.sleep(2000);
for (String filepath : files) {
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
System.err.println(filepath);
// 分类并移动
// checkAndRemove(filepath, targetDir);
}
});
}
// 等待线程执行完成
fixedThreadPool.shutdown();
try {
fixedThreadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 打印执行结果
if (fails.size() != 0){
System.err.println("以下路径移动失败:");
for (String fail : fails) {
System.err.println(fail);
}
}else{
System.err.println("全部执行成功!");
}
}
/**
* 获取源文件夹下的文件并进行处理
* @param directoryPath 源文件夹
* @return
*/
public static LinkedList<String> getAllFile(String directoryPath) {
LinkedList<String> list = new LinkedList<String>();
File baseFile = new File(directoryPath);
if (baseFile.isFile() || !baseFile.exists()) {
return list;
}
File[] files = baseFile.listFiles();
for (File file : files) {
if (file.isDirectory()) {
//list.add(file.getAbsolutePath());
System.out.printf("检索目录:%s\n", file.getAbsolutePath());
list.addAll(getAllFile(file.getAbsolutePath()));
} else {
list.add(file.getAbsolutePath());
}
}
return list;
}
/**
* 检测并移动文件
* @param filepath 源文件路径
* @param targetDir 目标根路径
*/
public static void checkAndRemove(String filepath, String targetDir){
// 根据规则检测文件并移动
//System.out.println(filepath);
// 根据路径规则归类
String typedir = checkFile(filepath);
// 取得文件名
String fileNameNow = filepath.substring(filepath.lastIndexOf("\\")+1);
//System.err.println(fileNameNow);
// 根据规则拼接路径
File subDirectory = new File(targetDir, typedir);
// 实际路径拼接文件名,得到目标完整路径
String tarfilepath=new File(subDirectory, fileNameNow).getAbsolutePath();
//System.err.println(tarfilepath);
// 这里根据路径规则,生成新的路径并移动过去(如果移动过去的文件路径不存在则会直接创建)
Boolean ok = moveFileToTarget(filepath, tarfilepath);
if(ok){
oks.add(filepath);
}else{
fails.add(filepath);
}
}
/**
* 分类规则判断
* @param filepath 全路径
* @return
*/
public static String checkFile(String filepath){
// 分类规则判断,比如里面有js的移动到js文件夹里面去
if(filepath.contains("js")){
return "js";
}
return "";
}
/**
* 移动文件并重命名
* @param fileFullNameCurrent 源地址
* @param fileFullNameTarget 目标地址
* @return
*/
public static Boolean moveFileToTarget(String fileFullNameCurrent,String fileFullNameTarget) {
boolean ismove = false;
File oldName = new File(fileFullNameCurrent);
if (!oldName.exists()) {
System.err.printf("要移动的文件不存在:%s!", fileFullNameCurrent);
return ismove;
}
if (oldName.isDirectory()) {
System.err.printf("要移动的文件是目录,不移动:%s!", fileFullNameCurrent);
return false;
}
File newName = new File(fileFullNameTarget);
if (newName.isDirectory()) {
System.err.printf("移动到目标位置的文件是目录,不移动:%s!", fileFullNameCurrent);
return false;
}
String pfile = newName.getParent();
File pdir = new File(pfile);
if (!pdir.exists()) {
pdir.mkdirs();
System.err.printf("要移动到目标位置文件的父目录不存在,创建:%s", pfile);
}
ismove = oldName.renameTo(newName);
return ismove;
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)