java项目删除姓名_【原创】java删除未匹配的文件夹FileFileFilter,FileUtils,删除目录名字不是某个名字的所有文件夹及其子文件夹...

1 packagecom.zuishiming.filedelete;2

3 importjava.io.File;4 importjava.io.IOException;5 importjava.util.ArrayList;6 importjava.util.Collection;7

8 importorg.apache.commons.io.FileUtils;9 importorg.apache.commons.io.filefilter.DirectoryFileFilter;10 importorg.apache.commons.io.filefilter.FileFileFilter;11 importorg.apache.commons.io.filefilter.IOFileFilter;12

13 /**

14 * Requirement: we want to delete all dirs except a SPECIALNAME dir in one root directory. 15 * tree data: 16 * rootdir(c:\test) 17 * --dir118 * --dir11 19 * --dir12("hello") 20 * --dir1321 * --dir222 * --dir2123 * --dir21124 * --dir2111("hello")25 * --dir21226 * --dir2227 * --dir328 * as this case, we want to delete c:\test dir all dirs except dir name is "hello", just bellow two dirs29 * c:\test\dir1\dir12 && c:\test\dir2\dir21\dir211\dir211130 *31 *@author草原战狼32 *33 */

34 public classFileDelete {35 public static void main(String[] args) throwsIOException {36 System.out.println("FileDelete Usage:");37 System.out.println("java -jar DeleteDirsAddFilter.jar wantDeleteParentDir keepDirectoryOrFiles");38 System.out.println("for example: java -jar DeleteDirsAddFilter.jar c:\\ \"test\"");39 if (args.length != 2) {40 System.out.println("parameters length must be 2");41 System.exit(0);42 }43 //File wantDeleteDir = new File("E:\\test\\");44 //String filterName = "hello";

45 File wantDeleteDir = new File(args[0]);46 String filterName = args[1];47 if (!wantDeleteDir.isDirectory()) {48 System.out.println(wantDeleteDir.getPath() + " is not a directory");49 System.exit(0);50 }51 IOFileFilter filterDeleteDir =DirectoryFileFilter.DIRECTORY;52 FileFileFilter fileFiter =(FileFileFilter) FileFileFilter.FILE;53 Collection filesAndDirs =FileUtils.listFilesAndDirs(54 wantDeleteDir, fileFiter, filterDeleteDir);55 System.out.println("Total Files/Dirs in " + wantDeleteDir.getPath() +": " +filesAndDirs.size());56 int countFile = 0;57 ArrayList allLeafDirs =listAllChildDirs(wantDeleteDir);58 System.out.println("Total Dirs in " + wantDeleteDir.getPath() +": " +allLeafDirs.size());59 FileMatchPath toFile = newFileMatchPath();60 FileMatchPath tempToFile = newFileMatchPath();61 ArrayList resultFileMatch = new ArrayList();62 for(FileMatchPath leafDir : allLeafDirs) {63 if(isNotDeltedFile(leafDir.getFile(), filterName)) {64 countFile++;65 String toFilePath = wantDeleteDir.getParentFile().getAbsolutePath() + "\\temp11" +countFile;66 File toFileFile = newFile(toFilePath);67 toFile.setFile(toFileFile);68 if(leafDir.getFile().exists()) {69 tempToFile =moveMatchFiles(leafDir, toFile);70 resultFileMatch.add(tempToFile);71 }72 }73 }74 FileUtils.deleteDirectory(wantDeleteDir);75 wantDeleteDir.mkdir();76 System.out.println("Total contains " + filterName + " size: " +resultFileMatch.size());77 if(resultFileMatch.size() != 0) {78 for(FileMatchPath fromFile : resultFileMatch) {79 File toFileFile = newFile(fromFile.getPath());80 FileUtils.moveDirectory(fromFile.getFile(), toFileFile);81 System.out.println("contain file: " +toFileFile.getAbsolutePath());82 }83 }84 System.out.println("All Files handle successful");85 }86

87 /**

88 * validate a dir's name is equals to filterName89 *@paramdir90 *@paramfilterName91 *@return

92 */

93 private static booleanisNotDeltedFile(File dir, String filterName) {94 if (dir.isDirectory() &&dir.getName().equals(filterName)) {95 return true;96 }97 return false;98 }99

100 /**

101 * move dir to a new destination,102 * this file get from a FileMatchPath, and store from file's path to new toDirMatchPath103 *@paramfromDirMatchPath104 *@paramtoDirMatchPath105 *@return

106 *@throwsIOException107 */

108 private static FileMatchPath moveMatchFiles(FileMatchPath fromDirMatchPath, FileMatchPath toDirMatchPath) throwsIOException {109 FileUtils.moveDirectory(fromDirMatchPath.getFile(), toDirMatchPath.getFile());110 FileMatchPath destFileMatchPath = newFileMatchPath(toDirMatchPath.getFile(), fromDirMatchPath.getPath());111 returndestFileMatchPath;112 }113

114 /**

115 * List all dirs in rootDir116 *@paramrootDir find its child dirs117 *@returnall rootDir's child dirs118 */

119 private static ArrayListlistAllChildDirs(File rootDir) {120 ArrayList leafDirs = new ArrayList();121 IOFileFilter filterDeleteDir =DirectoryFileFilter.DIRECTORY;122 FileFileFilter fileFiter =(FileFileFilter) FileFileFilter.FILE;123 Collection filesAndDirs =FileUtils.listFilesAndDirs(124 rootDir, fileFiter, filterDeleteDir);125 for(File file : filesAndDirs) {126 if(file.isDirectory()) {127 FileMatchPath fileMatch = newFileMatchPath();128 fileMatch.setFile(file);129 fileMatch.setPath(file.getAbsolutePath());130 leafDirs.add(fileMatch);131 }132 }133 returnleafDirs;134 }135 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值