package com.interview.flag.o; import java.io.File; import java.util.HashMap; /** * Created_By: stefanie * Date: 15-1-13 * Time: 上午11:02 */ public class O8_RenameFileToLowercase { HashMap<File, File> nameMap = new HashMap(); File base; public O8_RenameFileToLowercase(String directory){ base = new File(directory); } public void toLowercase(){ if(base.exists()) base = toLowercase(base); } private File toLowercase(File file){ if(file.isDirectory()){ for(File child : file.listFiles()){ toLowercase(child); } return renameFile(file); } else { return renameFile(file); } } private File renameFile(File file){ if(file.getName().toLowerCase().equals(file.getName())) return file; String renamed = file.getParentFile().getPath() + File.separator + file.getName().toLowerCase(); File renamedFile = new File(renamed); System.out.println("Rename " + file.getAbsolutePath() + " to " + renamedFile.toString()); file.renameTo(renamedFile); nameMap.put(renamedFile, file); return renamedFile; } public void undo(){ if(!nameMap.isEmpty()) undo(base); nameMap.clear(); } private void undo(File file){ if(file.isDirectory()){ file = undoRenameFile(file); for(File child : file.listFiles()) undo(child); } else { undoRenameFile(file); } } private File undoRenameFile(File file){ File original = nameMap.get(file); System.out.println("Undo rename " + file.getAbsolutePath() + " to " + original.toString()); file.renameTo(original); return original; } public static void main(String[] args){ String base = "/Users/stefanie/sample/ABC"; O8_RenameFileToLowercase fileManager = new O8_RenameFileToLowercase(base); fileManager.toLowercase(); fileManager.undo(); } }