1. Xóa file trong Java
Trong Java, để xóa một file ta sử dụng phương thức delete() . Đây là phương thức được tích hợp sẵn trong lớp file .
public boolean delete()
Khi xóa file thành công phương thức này sẽ trả về True và ngược lại. Nếu xóa file không thành công phương thức sẽ trả về False.
Ngoài ra ta cũng cần chú ý 2 phương thức sau của lớp file:
- Phương thức delete(Path) : dùng để xóa file hoặc sẽ ném ra một ngoại lệ nếu không xóa được. Ví dụ như việc nếu file không tồn tại thì ngoại lệ NoSuchFileException sẽ được ném ra. Ta cũng có thể dựa vào đó bắt ngoại lệ để xác định lý do tại sao việc xóa không thành công
- Phương thức deleteIfExists(Path) : cũng là dùng để xóa file nhưng phương thức này sẽ không ném ra ngoại lệ dù file có không tồn tại đi nữa. Điều này hữu ích trong việc ta có nhiều luồng để xóa tập tin và ta không muốn ném ngoại lệ vì một luồng nào đó đã đảm nhiệm
Ví dụ:
import java.io.File; public class DeleteFileExample { public static void main(String[] args) { try { File file = new File("D:\\testout2.txt"); if (file.delete()) { System.out.println(file.getName() + " đã xóa!"); } else { System.out.println("Thao tác xóa không thành công."); } } catch (Exception e) { e.printStackTrace(); } } }
Kết quả nếu file testout2.txt có tồn tại thì sẽ cho ra kết quả sau
testout2.txt đã xóa!
2. Xóa nhiều file dựa vào phần mở rộng trong Java
Trong Java, ta có thể thực hiện implements giao tiếp FilenameFilter và ghi đè phương thức accept(File dir, String name) để lọc file theo phần mở rộng
Ví dụ: implement giao tiếp FilenameFilter để liệt kê ra các file có phần mở rộng là “.txt”, sau đó thực hiện xóa từng file. Ta có thể tạo ra một số file có đuôi “.txt” để chạy bài một cách hiệu quả nhất
import java.io.File; import java.io.FilenameFilter; public class DeleteFilesExample { private static final String FILE_DIR = "D:\\log"; private static final String FILE_TEXT_EXT = ".txt"; public static void main(String args[]) { new DeleteFilesExample().deleteFile(FILE_DIR, FILE_TEXT_EXT); } public void deleteFile(String folder, String ext) { GenericExtFilter filter = new GenericExtFilter(ext); File dir = new File(folder); // liệt kê tất cả tên tệp có phần mở rộng .txt String[] list = dir.list(filter); // xóafiles if (list.length == 0) { 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); } } } // lớp bên trong, bộ lọc mở rộng chung 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)); } } }
Kết quả
file : D:\log\a.txt is deleted : true file : D:\log\b.txt is deleted : true file : D:\log\c.txt is deleted : true file : D:\log\d.txt is deleted : true
Ví dụ 2: Xóa nhiều file trong Java sử dụng anonymous class (ẩn danh)
import java.io.File; import java.io.FilenameFilter; public class DeleteFilesExample2 { private static final String FILE_DIR = "C:\\log"; private static final String FILE_TEXT_EXT = ".txt"; public static void deleteFiles(String folder, String ext) { File dir = new File(folder); // liệt kê tất cả tên tệp có phần mở rộng .txt String[] list = dir.list(new FilenameFilter() { @Override public boolean accept(File file, String name) { return name.endsWith(FILE_TEXT_EXT); } }); // delete files if (list.length == 0) { 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); } } } }
Kết quả
file : C:\log\a.txt is deleted : true file : C:\log\b.txt is deleted : true file : C:\log\c.txt is deleted : true file : C:\log\d.txt is deleted : true