/* 用來刪除檔案夾的類,如果檔案夾存在那麼就刪除該檔案夾以及檔案夾下的所有檔案和檔案夾 如果是檔案,那麼就刪除該檔案 */ import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class DeleteDir { private static File m_root; //記錄要刪除的路徑 private static ArrayList m_dirs;// /** * 功能:刪除檔案夾方法 * @param dir 要刪除的檔案夾路徑(java.io.File類型) */ public boolean deleteDirs(java.io.File dir) { boolean isdelete=false; try { m_root = dir; m_dirs = new ArrayList(); if (!m_root.isDirectory()) { //判斷輸入的是否為路徑 System.out.println(m_root.toString() + " 不是路徑"); //如果不是目錄那麼就是檔案,下面是刪除檔案 if(m_root.exists()){ if(m_root.isFile()){ isdelete=m_root.delete(); } } } else { //輸出m_dirs中記錄的值 //for(int i=0 ; i<m_dirs.size() ; i++){ // System.out.println(((File)m_dirs.get(i)).toString()); //} m_dirs.add(m_root); this.visitAll(m_root); //擷取指定路徑下的所有檔案已經檔案夾(遞迴調用) this.rootDelete(); //刪除list中的所有檔案(倒敘迴圈刪除) isdelete=true; } } catch (Exception ex) { System.out.println("error in deleteDirs : " + ex.getMessage()); } return isdelete; } /** * 功能:刪除檔案或檔案夾 * 注意:使用倒敘刪除,先刪除檔案,然後刪除空檔案夾 */ private void rootDelete() { try { if (m_dirs != null) { //使用倒敘迴圈刪除(先刪除檔案,再刪除檔案夾) for (int i = m_dirs.size() - 1; i >= 0; i--) { File f = (File) m_dirs.remove(i);//擷取之後刪除list中的資料 //刪除資料 if (!f.delete()) { System.out.println("檔案路徑:" + f.toString() + " 不存在"); } } } else { System.out.println("擷取檔案list列表(m_dirs)為空白"); } } catch (Exception ex) { System.out.println("error in rootDelete : " + ex.getMessage()); } } /** * 功能:擷取所有檔案和檔案夾,儲存在m_dirs中 * 注意:遞迴調用 * @param tempRoot 檔案路徑 */ private void visitAll(File tempRoot) { try { //擷取指定路徑下的所有檔案 File[] dirs = tempRoot.listFiles(); if (dirs != null) { //將檔案數群組轉換成List對象 List dirslist = Arrays.asList(dirs); //將dirslist完全添加到m_dirs中 m_dirs.addAll(dirslist); //遞迴調用 for (int i = 0; i < dirslist.size(); i++) { this.visitAll((File) dirslist.get(i)); } } } catch (Exception ex) { System.out.println("error in visitAll : " + ex.getMessage()); } } public static void main(String[] args) throws Exception { String path = "F://TDDownload//WindowsXP-KB835935-SP2-CHS.exe.td"; DeleteDir dd = new DeleteDir(); System.out.println(dd.deleteDirs(new File(path))); System.out.println("OK"); } /* *//** * 刪除檔案或者檔案夾,對於檔案夾遍曆其子檔案夾進行遞迴刪除 * @param f - File對象 * @return 刪除是否成功 *//* public static boolean deleteFile(File f) { if (f.exists()) { if (f.isFile()) return f.delete(); else if (f.isDirectory()) { File[] files = f.listFiles(); for (int i = 0; i < files.length; i++) { if (!deleteFile(files)) return false; } return f.delete(); } else return false; } else return false; }*/ } |