java:file檔案的處理總結
阿新 • • 發佈:2019-01-24
常用方法:
- f.exists(); 檔案是否存在
- f.delete(); 只刪除檔案
- f.mkdirs(); 路徑是否存在
- f.isFile(); 是否檔案
建立檔案
File file = new File();
此處會建立一個新檔案;
刪除檔案
這裡一般會有多種情況:
- 刪除單個檔案
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();
}
}
}
刪除資料夾下所有檔案(不包括資料夾)
- 此例會刪除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
}
- 刪除資料夾下所有檔案包括資料夾
我理解為判斷是否是資料夾,不是刪除,是迴圈呼叫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() 方法只是做了一個簡單的測試,建立資料夾和檔案都是本地建立,情況考慮的應該很全面了,包括資料夾包含資料夾、檔案。檔案的不同情況…………
實現沒有問題,可以正確刪除資料夾和檔案。
- 刪除某種副檔名檔案
(僅做參考,未測試)
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));
}
}
}