1. 程式人生 > >java:file檔案的處理總結

java:file檔案的處理總結

常用方法:

  1. f.exists(); 檔案是否存在
  2. f.delete(); 只刪除檔案
  3. f.mkdirs(); 路徑是否存在
  4. f.isFile(); 是否檔案

建立檔案

File file = new File();

此處會建立一個新檔案;

刪除檔案

這裡一般會有多種情況:

  1. 刪除單個檔案
import java.io.File;
public class DeleteFileExample
{
    public static void main(String[] args)
    {
        try{

            File file = new
File("c:\\logfile20100131.log"); if(file.delete()){ System.out.println(file.getName() + " is deleted!"); }else{ System.out.println("Delete operation is failed."); } }catch(Exception e){ e.printStackTrace(); } } }
  1. 刪除資料夾下所有檔案(不包括資料夾)

    • 此例會刪除demo資料夾下所有檔案;
    • 如果demo內有資料夾且為空,也可以刪除(已實際測試);
    • 但demo內有資料夾且不為空,則刪除此資料夾外所有檔案,此資料夾保留不做處理;
        try {
            File dir = new File("D:\\image\\demo");
            File[] files = dir.listFiles();  
            for (int i = 0; i < files.length; i++) {  
                files[i].delete
(); System.out.println(i+"******************************8"); } } catch (Exception e) { // TODO: handle exception }
  1. 刪除資料夾下所有檔案包括資料夾
    我理解為判斷是否是資料夾,不是刪除,是迴圈呼叫2。
    完整邏輯較為複雜,沒有時間寫了,摘抄一個作為備份。其本質是判斷子資料夾存在不為空,則迴圈呼叫刪除子檔案。
1,驗證傳入路徑是否為正確的路徑名(Windows系統,其他系統未使用)
// 驗證字串是否為正確路徑名的正則表示式  
private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";  
// 通過 sPath.matches(matches) 方法的返回值判斷是否正確  
// sPath 為路徑字串  

2,通用的資料夾或檔案刪除方法,直接呼叫此方法,即可實現刪除資料夾或檔案,包括資料夾下的所有檔案
/** 
 *  根據路徑刪除指定的目錄或檔案,無論存在與否 
 *@param sPath  要刪除的目錄或檔案 
 *@return 刪除成功返回 true,否則返回 false。 
 */  
public boolean DeleteFolder(String sPath) {  
    flag = false;  
    file = new File(sPath);  
    // 判斷目錄或檔案是否存在  
    if (!file.exists()) {  // 不存在返回 false  
        return flag;  
    } else {  
        // 判斷是否為檔案  
        if (file.isFile()) {  // 為檔案時呼叫刪除檔案方法  
            return deleteFile(sPath);  
        } else {  // 為目錄時呼叫刪除目錄方法  
            return deleteDirectory(sPath);  
        }  
    }  
}  

3,實現刪除檔案的方法,
/** 
 * 刪除單個檔案 
 * @param   sPath    被刪除檔案的檔名 
 * @return 單個檔案刪除成功返回true,否則返回false 
 */  
public boolean deleteFile(String sPath) {  
    flag = false;  
    file = new File(sPath);  
    // 路徑為檔案且不為空則進行刪除  
    if (file.isFile() && file.exists()) {  
        file.delete();  
        flag = true;  
    }  
    return flag;  
}  

4,實現刪除資料夾的方法,
/** 
 * 刪除目錄(資料夾)以及目錄下的檔案 
 * @param   sPath 被刪除目錄的檔案路徑 
 * @return  目錄刪除成功返回true,否則返回false 
 */  
public boolean deleteDirectory(String sPath) {  
    //如果sPath不以檔案分隔符結尾,自動新增檔案分隔符  
    if (!sPath.endsWith(File.separator)) {  
        sPath = sPath + File.separator;  
    }  
    File dirFile = new File(sPath);  
    //如果dir對應的檔案不存在,或者不是一個目錄,則退出  
    if (!dirFile.exists() || !dirFile.isDirectory()) {  
        return false;  
    }  
    flag = true;  
    //刪除資料夾下的所有檔案(包括子目錄)  
    File[] files = dirFile.listFiles();  
    for (int i = 0; i < files.length; i++) {  
        //刪除子檔案  
        if (files[i].isFile()) {  
            flag = deleteFile(files[i].getAbsolutePath());  
            if (!flag) break;  
        } //刪除子目錄  
        else {  
            flag = deleteDirectory(files[i].getAbsolutePath());  
            if (!flag) break;  
        }  
    }  
    if (!flag) return false;  
    //刪除當前目錄  
    if (dirFile.delete()) {  
        return true;  
    } else {  
        return false;  
    }  
}  

5,main() 方法
public static void main(String[] args) {  
    HandleFileClass hfc = new HandleFileClass();  
    String path = "D:\\Abc\\123\\Ab1";  
    boolean result = hfc.CreateFolder(path);  
    System.out.println(result);  
    path = "D:\\Abc\\124";  
    result = hfc.DeleteFolder(path);  
    System.out.println(result);  
}  

main() 方法只是做了一個簡單的測試,建立資料夾和檔案都是本地建立,情況考慮的應該很全面了,包括資料夾包含資料夾、檔案。檔案的不同情況…………
實現沒有問題,可以正確刪除資料夾和檔案。
  1. 刪除某種副檔名檔案
    (僅做參考,未測試)
import java.io.*;
public class FileChecker {

   private static final String FILE_DIR = "c:\folder";
   private static final String FILE_TEXT_EXT = ".txt";

   public static void main(String args[]) {
 new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT);
   }

   public void deleteFile(String folder, String ext){

     GenericExtFilter filter = new GenericExtFilter(ext);
     File dir = new File(folder);

     //list out all the file name with .txt extension
     String[] list = dir.list(filter);

     if (list.length == 0) return;

     File fileDelete;

     for (String file : list){
    String temp = new StringBuffer(FILE_DIR)
                      .append(File.separator)
                      .append(file).toString();
     fileDelete = new File(temp);
     boolean isdeleted = fileDelete.delete();
     System.out.println("file : " + temp + " is deleted : " + isdeleted);
     }
   }

   //inner class, generic extension filter 
   public class GenericExtFilter implements FilenameFilter {

       private String ext;

       public GenericExtFilter(String ext) {
         this.ext = ext;             
       }

       public boolean accept(File dir, String name) {
         return (name.endsWith(ext));
       }
    }
}