Cách xóa thư mục trong Java

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ỉ 😀

0 0 votes
Đánh giá bài viết
Nhận thông báo
Thông báo khi có
guest

2 Bình luận
cũ nhất
mới nhất vote nhiều nhất
Phản hồi nội tuyến
Xem tất cả các bình luận
Kha

Cái này xóa bằng for chứ đệ quy đâu anh

Ngọc Khương

Đệ 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à.