Gói java.io không có một lớp Directory
, nhưng bạn có thể sử dụng phương pháp mkdir()
trên lớp File
thay vì:
(new File("Foo")).mkdir()
Lưu ý rằng mkdir()
có hai chế độ thất bại riêng biệt:
- "Nếu người quản lý bảo mật tồn tại và phương pháp
checkWrite()
của nó không cho phép tạo thư mục được đặt tên" thì SecurityException
sẽ bị ném.
- Nếu hoạt động không thành công vì lý do khác,
mkdir()
sẽ trả về false. (Cụ thể hơn, nó sẽ trở lại đúng khi và chỉ khi thư mục đã được tạo ra.)
điểm 1 là ok - nếu bạn không có sự cho phép, ném. Điểm 2 là một ít tối ưu hóa phụ vì ba lý do:
- Bạn cần kiểm tra kết quả boolean từ phương pháp này. Nếu bạn bỏ qua kết quả, thao tác có thể âm thầm thất bại.
- Nếu bạn nhận được khoản hoàn trả sai, bạn không biết tại sao hoạt động thất bại, điều này gây khó khôi phục hoặc xây dựng một thông báo lỗi có ý nghĩa.
- Từ ngữ "nếu và chỉ nếu" nghiêm ngặt của hợp đồng cũng có nghĩa là phương thức trả về false nếu thư mục đã tồn tại.
Ngoài: Contrast điểm 3 với hành vi của .NET Directory.CreateDirectory()
mà không có gì nếu thư mục tồn tại. Loại ý nghĩa này - "tạo một thư mục "; "ok, thư mục được tạo ". Có quan trọng nếu nó đã được tạo ngay bây giờ hoặc sớm hơn; bằng quy trình này hay quy trình khác? Nếu bạn thực sự quan tâm đến điều đó, bạn sẽ không hỏi một câu hỏi khác nhau : "Thư mục này có tồn tại không?"
Thông báo trước là mkdir()
sẽ không tạo nhiều thư mục cùng một lúc. Ví dụ đơn giản của tôi về một thư mục có tên "Foo", điều này là tốt; tuy nhiên, nếu bạn muốn tạo một thư mục có tên Bar trong thư mục Foo (tức là để tạo thư mục "Foo/Bar"), bạn phải nhớ sử dụng phương thức mkdirs()
để thay thế.
Vì vậy, để làm việc xung quanh tất cả những hãy cẩn thận, bạn có thể sử dụng một phương pháp helper như sau:
public static File createDirectory(String directoryPath) throws IOException {
File dir = new File(directoryPath);
if (dir.exists()) {
return dir;
}
if (dir.mkdirs()) {
return dir;
}
throw new IOException("Failed to create directory '" + dir.getAbsolutePath() + "' for an unknown reason.");
}
Nguồn
2009-10-12 12:22:28
Bạn đã đặt câu hỏi và ngay lập tức đăng câu trả lời của riêng mình? – KLE
-1. Có vẻ rất lạ khi đăng câu hỏi và câu trả lời. Stack Overflow không phải là một microphone để bạn có thể thuyết trình. –
+1. Là tốt để gửi câu hỏi và câu trả lời của riêng bạn. Giúp cộng đồng và hữu ích để tham khảo trong tương lai. Nếu mọi người không đồng ý với câu trả lời của bạn thì họ có thể cung cấp câu trả lời tốt hơn. Tìm kiếm * nhanh * trên Meta SO dường như đồng ý rằng điều này là tốt. – Iain