java中文件操作(遞歸刪除空文件夾,刪除過期文件)

(1)保留規定的前幾個月的記錄如下:

/**

* 清理目錄中過期的文件
*
* @param dayCount
* :保存時間天數
* @param dirPath
* :目錄路徑
* @return
*/
@SuppressWarnings("unchecked")
private static boolean deleteFiles(String dirPath, String backupPath, int days, boolean isBackup) {// 計算備份日期,備份該日期之前的文件Date pointDate = new Date();long timeInterval = pointDate.getTime() - convertDaysToMilliseconds(days);pointDate.setTime(timeInterval);// 是否進行備份if (isBackup) {if (!backUpFiles(dirPath, backupPath, pointDate)) {
System.out.println("Backup failed:"+ dirPath);
return false;}}// 設置文件過濾條件IOFileFilter timeFileFilter = FileFilterUtils.ageFileFilter(pointDate, true);IOFileFilter fileFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, timeFileFilter);// 刪除符合條件的文件File deleteRootFolder = new File(dirPath);Iterator itFile = FileUtils.iterateFiles(deleteRootFolder, fileFiles, TrueFileFilter.INSTANCE);while (itFile.hasNext()) {File file = (File) itFile.next();boolean result = file.delete();if (!result) {
LogEx.error("Failed to delete file of :"+ file);
return false;}}// 清理空的文件夾File[] forderList = deleteRootFolder.listFiles();if (forderList != null && forderList.length > 0) {for (int i = 0; i < forderList.length; i++) {
deleteEmptyDir(forderList[i]);}}return true;
}/**
* 備份刪除文件到指定的目錄 ,目錄格式:yyyy_MM_dd_bak
*
* @param srcDir
* :源文件路徑
* @param destDir
* :目標文件路徑
* @param dayCount
* :時間間隔,備份該時間之前的數據
* @return
*/
private static boolean backUpFiles(String srcDir, String destDir, Date pointDate) {try {// 設置備份文件夾格式YYYY_MM_dd_bakSimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd");String folderName = format.format(new Date()) +"_bak";
File resFile = new File(srcDir);File distFile = new File(destDir + File.separator + folderName);
// 文件過濾條件IOFileFilter timeFileFilter = FileFilterUtils.ageFileFilter(pointDate, true);IOFileFilter fileFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, timeFileFilter);
// 複製文件目錄FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, fileFiles);FileUtils.copyDirectory(resFile, distFile, filter, true);} catch (IOException e) {e.printStackTrace();LogEx.error("Failed to backupFile:"+ e.getMessage());return false;}return true;
}/**
* 天與毫秒的轉換
*
* @param days
* @return
*/
private static long convertDaysToMilliseconds(int days) {return days * 24L * 3600 * 1000;
}

 2、清理所有的文件夾


/**
* 循環刪除空的文件夾
*
* @param dir
*/
private static void deleteEmptyDir(File dir) {if (dir.isDirectory()) {File[] fs = dir.listFiles();if (fs != null && fs.length > 0) {
for (int i = 0; i < fs.length; i++) {
File tmpFile = fs[i];
if (tmpFile.isDirectory()) {deleteEmptyDir(tmpFile);
}
if (tmpFile.isDirectory() && tmpFile.listFiles().length <= 0) {tmpFile.delete();
}
}}if (dir.isDirectory() && dir.listFiles().length == 0) {
dir.delete();}}
}
發佈了151 篇原創文章 · 獲贊 31 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章