Bạn đã biết cách tạo thư mục trong Java, vậy để xóa một thư mục phải làm thế nào, đơn giản bạn có thể sử dụng File.delete()
, nhưng thư mục đó phải rỗng thì mới xóa được.
Ví dụ xóa thư mục rỗng
package com.ngockhuong; import java.io.File; import java.io.IOException; public class DeleteDirectoryExample { private static final String SRC_FOLDER = "C:\\ThuMucCanXoa"; public static void main(String[] args) { File directory = new File(SRC_FOLDER); // Kiểm tra thư mục đã tồn tại hay chưa if (!directory.exists()) { System.out.println("Thư mục không tồn tại."); } else { if (directory.delete()) { // phương thức trả về true hoặc false System.out.println("Xóa thành công thư mục rỗng"); } else { System.out.println("Thư mục không rỗng hoặc có lỗi khi xóa"); } } } }
Giả sử một khách hàng muốn bạn viết chương trình xóa một thư mục mà thư mục đó chứa rất rất nhiều file, thư mục hạng nặng khác. Nếu làm được, khách hàng danh giá kia sẽ trả cho bạn 1 trịu like, à nhầm 1 trịu trịu đố la. Vậy phải làm sao bây giờ…
Ý tưởng cho đôi ta: Chúng ta sẽ dùng phương pháp đệ quy để xóa. Kiểm tra thư mục muốn xóa có các file thì xóa đi ngay, nếu có chứa các thư mục khác mà các thư mục đó lại chứa file khác nữa thì lại kiểm tra như bước trước rồi xóa.
Ví dụ sử dụng đệ quy xóa thư mục trong Java
Chúng ta sẽ xóa thư mục có tên “PhimXXX” có path “C:\\PhimXXX” và tất cả các thư mục con, các file nằm trong thư mục đó (nếu có). Các bạn đọc comment code trong ví dụ để hiểu rõ hơn nhá.
package com.ngockhuong; import java.io.File; import java.io.IOException; public class DeleteDirectoryExample { private static final String SRC_FOLDER = "C:\\PhimXXX"; public static void main(String[] args) { File directory = new File(SRC_FOLDER); // kiểm tra thư mục đã tồn tại hay chưa if (!directory.exists()) { System.out.println("Thư mục không tồn tại."); System.exit(0); // thoát chương trình } else { try { delete(directory); // phương thức xóa tất cả các file } catch (IOException e) { e.printStackTrace(); System.exit(0); } } System.out.println("Xóa xong rồi!"); } public static void delete(File file) throws IOException { // kiểm tra có phải là thư mục hay không if (file.isDirectory()) { // thư mục rỗng thì xóa ngay và luôn bằng phương thức delete() của lớp File if (file.list().length == 0) { file.delete(); System.out.println("Thư mục đã xóa : " + file.getAbsolutePath()); } else { // tạo mảng String chứa tên các file, thư mục chứa trong thư mục cần kiểm tra String files[] = file.list(); for (String temp : files) { // tạo đối tượng file với tên từ mảng đã tạo chuẩn bị cho việc đệ quy xóa File fileDelete = new File(file, temp); // đệ quy: dùng lại phương thức xóa delete(fileDelete); } // kiểm tra thư mục lại một lần nữa, nếu rỗng thì xóa if (file.list().length == 0) { file.delete(); System.out.println("Thư mục đã xóa: " + file.getAbsolutePath()); } } } else { // nếu là file thì xóa ngay bằng phương thức delete() của lớp File file.delete(); System.out.println("File đã được xóa: " + file.getAbsolutePath()); } } }
Kết quả
File đã được xóa: C:\PhimXXX\danh-sach-phim-hay.txt File đã được xóa: C:\PhimXXX\phim-hoat-hinh-hay.txt Thư mục đã xóa : C:\PhimXXX\PhimHanhDong\fim File đã được xóa: C:\PhimXXX\PhimHanhDong\link-phim-kungfu.txt Thư mục đã xóa: C:\PhimXXX\PhimHanhDong File đã được xóa: C:\PhimXXX\PhimHoatHinh\doremon.txt Thư mục đã xóa: C:\PhimXXX\PhimHoatHinh File đã được xóa: C:\PhimXXX\PhimNgan\phim-ngan-tap.txt File đã được xóa: C:\PhimXXX\PhimNgan\PhimCucNgan\PhimHetSucNgan\phim.txt Thư mục đã xóa: C:\PhimXXX\PhimNgan\PhimCucNgan\PhimHetSucNgan Thư mục đã xóa: C:\PhimXXX\PhimNgan\PhimCucNgan Thư mục đã xóa: C:\PhimXXX\PhimNgan Thư mục đã xóa: C:\PhimXXX Xóa xong rồi!
Rõ rồi, mình đã xóa xong thư mục phim ấy ấy, nhẹ lắm, có vài file vài thư mục thôi à. Còn máy bạn thì sao, chắc phải vài GB nhỉ 😀
Cái này xóa bằng for chứ đệ quy đâu anh
Đệ quy đó chứ e. Phương thức delete() đang được gọi lại trong chính phần thân của nó mà.