使用File的lastModify方法是不行的,又不想使用md5碼來校驗(yàn),不使用md5來判斷是因?yàn)閙d5算法運(yùn)算大文件時耗時間。況且內(nèi)容不改變,只改變文件名。
后來使用lastModify+文件的絕對路徑來作為依據(jù)判斷,我做了2個Map來映射,新map和舊map不匹配則會產(chǎn)生新增和刪除這2個結(jié)果。
這樣用來判斷文件還是可以的 但是文件夾就不行了。如果文件夾下面還有文件(夾),也會被誤認(rèn)為重命名。
有什么其他解決辦法嗎?或者代碼應(yīng)該如何修改更加好?
代碼如下:
public class Main {
public Map<STRING,LONG> map = new HashMap<STRING, long="">();
public String baseFilePath;
public static void main(String[] args) throws IOException, InterruptedException {
String baseFilePath = "D:\\md5";
Main m = new Main(baseFilePath);
Map<STRING, long=""> oldMap = m.getFileInfo(baseFilePath);
//很長時間過去了
//-------------------各種操作:文件(夾)或修改或刪除或新增----------------
File oldFile = new File(baseFilePath+"\\ddd.txt");//刪除
oldFile.delete();
File newFile = new File(baseFilePath+"\\new.txt");//新增
newFile.createNewFile();
File olddir = new File(baseFilePath+"\\test");//重命名
File newdir = new File(baseFilePath+"\\test2");
olddir.renameTo(newdir);
//-------------------操作結(jié)束---------------------------------------
Main m2 = new Main(baseFilePath);
Map<STRING, long=""> newMap = m2.getFileInfo(baseFilePath);
Map<STRING, string=""> resultMap = m.getModifyInfo(oldMap, newMap);
List<STRING> resultKeys = new ArrayList<STRING>(resultMap.keySet());
for(String resultKey:resultKeys){
String resultValue = resultMap.get(resultKey);
System.out.println(resultKey+"---"+resultValue);
}
}
public Main(String baseFilePath){
this.baseFilePath = baseFilePath;
}
/**
* 循環(huán)得到目錄下的名字和modify時間
* @param baseFile 根目錄
* @return Map<STRING, long=""> 相對baseFilePath的路徑 以及 最后修改時間
*/
public Map<STRING, long=""> getFileInfo(String baseFile){
FileOperate fo = new FileOperate();
File[] files = fo.getFileList(baseFile);
for(File file:files){
map.put(file.getAbsolutePath()。substring(baseFilePath.length()), file.lastModified());//相對baseFilePath的路徑 以及 最后修改時間
if(file.isDirectory()){
getFileInfo(file.getAbsolutePath());//遞歸
}
}
return map;
}
/**
* 比較目錄信息(返回變動的目錄信息)
* @param oldMap
* @param newMap
* @return 存放鍵值對:鍵是目錄 值是類型(如文件內(nèi)容修改,文件(夾)刪除,文件(夾)添加) 注:文件(夾)重命名屬于刪除、添加
*/
public Map<STRING, string=""> getModifyInfo(Map<STRING, long=""> oldMap,Map<STRING, long=""> newMap){
Map<STRING, string=""> resultMap = new HashMap<STRING, string="">();
List<STRING> oldKeysList = new ArrayList<STRING>(oldMap.keySet());
List<STRING> newKeysList = new ArrayList<STRING>(newMap.keySet());
for(String oldKey:oldKeysList){
long oldValue = oldMap.get(oldKey);
if(newKeysList.contains(oldKey)){//包含此文件(夾)
long newValue = newMap.get(oldKey);
if(oldValue==newValue){//文件(夾)沒修改
//continue;
}else{//文件被修改
resultMap.put(oldKey, "修改");
}
}else{//不包含 刪除
resultMap.put(oldKey, "刪除");
}
}
for(String newKey:newKeysList){
if(oldKeysList.contains(newKey)){
//continue;
}else{//新增
resultMap.put(newKey, "新增");
}
}
return resultMap;
}
}
</STRING></STRING></STRING></STRING></STRING,></STRING,></STRING,></STRING,></STRING,>
</STRING,></STRING,></STRING></STRING></STRING,></STRING,></STRING,></STRING,>
</STRING,LONG>
www.lefeng123.com 托福答案