您的位置:首页 > 其它

批量删除maven下载失败文件lastUpdated的目录

2017-03-27 14:02 555 查看
因网络或其他的原因,maven下载jar等文件失败后,会在目录中存在  *.jar.lastUpdated ,如:xmlpull-1.1.3.1.jar.lastUpdated,

此时,代码编译时会一直出错,编译无法通过。

必须将此下载失败文件的目录全部删除,然后让maven重新下载jar等文件。

如果下载失败的文件太多,查找和删除时会很耗时间的。

下面提供一个查找和删除文件目录的类,减轻了工作量。

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

/**
* 删除maven下载失败的目录
* <pre>
* 先搜索 存在 lastUpdated的文件(即jar文件等),
* 然后再删除此文件的目录
* </pre>
*/
public class DeleteMavenDownloadfailedFile {

/**声明统计文件个数的变量*/
static int countFiles = 0;

/**声明统计文件夹的变量*/
static int countFolders = 0;

/**
*递归查找包含关键字的文件
*/
public static File[] searchFile(File folder, final String keyWord) {

File[] subFolders = folder.listFiles(new FileFilter() {// 运用内部匿名类获得文件
public boolean accept(File pathname) {// 实现FileFilter类的accept方法
if (pathname.isFile()) {// 如果是文件
countFiles++;
} else {
// 如果是目录
countFolders++;
}
if (pathname.isDirectory()
|| (pathname.isFile() && pathname.getName().toLowerCase().contains(keyWord.toLowerCase()))) {// 目录或文件包含关键字
return true;
}
return false;
}
});

List<File> result = new ArrayList<File>();// 声明一个集合
for (int i = 0; i < subFolders.length; i++) {// 循环显示文件夹或文件
if (subFolders[i].isFile()) {// 如果是文件则将文件添加到结果列表中
result.add(subFolders[i]);
} else {// 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中
File[] foldResult = searchFile(subFolders[i], keyWord);
for (int j = 0; j < foldResult.length; j++) {// 循环显示文件
result.add(foldResult[j]);// 文件保存到集合中
}
}
}
File files[] = new File[result.size()];// 声明文件数组,长度为集合的长度
result.toArray(files);// 集合数组化
return files;
}

public static File[] find(String root, String keyword) {
File folder = new File(root);// 默认目录
if (!folder.exists()) {// 如果文件夹不存在
System.out.println("目录不存在:" + folder.getAbsolutePath());
return null;
}
File[] result = searchFile(folder, keyword);// 调用方法获得文件数组

return result;
}

/**
* 删除文件和目录
*
* 注意:根据业务场景,此方法没有采用递归删除
*
* @param file
*/
public static void delete(File file) {
if (file.exists()) {
if (file.isFile()) {
boolean bb = file.delete();
System.out.println(file.getAbsolutePath() + " 删除状态:" + bb);
} else if (file.isDirectory()) {
File files[] = file.listFiles();
for (int i = 0; i < files.length; i++) {
File _file = files[i];
boolean bb = _file.delete();
System.out.println("      " + _file.getAbsolutePath() + " 删除状态:" + bb);
}
}
boolean bb = file.delete();
System.out.println(file.getAbsolutePath() + " 删除状态:" + bb);
} else {
System.out.println("所删除的文件不存在!" + file.getAbsolutePath());
}
}

public static void main(String[] args) {
String root = "C:\\Users\\Administrator\\.m2\\repository";
String keyword = "lastUpdated";

File[] result = find(root, keyword);
if (result == null ) {
return;
}
if (result.length == 0) {
System.out.println("查找文件为 0");
return;
}

System.out.println("在 " + root + " 以及所有子文件时查找对象" + keyword);
System.out.println("查找了" + countFiles + " 个文件," + countFolders + " 个文件夹,共找到 " + result.length + " 个符合条件的文件:");
for (int i = 0; i < result.length; i++) {// 循环显示文件
File file = result[i];
delete(new File(file.getParentFile().getAbsolutePath()));
// System.out.println(file.getAbsolutePath() +
// " == "+file.getParentFile().getAbsolutePath());// 显示文件绝对路径
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐