2010-03-29 40 views
8

OK, tôi cảm thấy như thế này nên dễ dàng nhưng rõ ràng là thiếu một cái gì đó cơ bản để tập tin bằng văn bản trong Java. Tôi có điều này:Ngoại lệ FileNotFound khi cố gắng ghi vào một tập tin

File someFile = new File("someDirA/someDirB/someDirC/filename.txt"); 

và tôi chỉ muốn ghi vào tệp. Tuy nhiên, trong khi someDirA tồn tại, someDirB (và do đó someDirC và filename.txt) không tồn tại. Làm điều này:

BufferedWriter writer = new BufferedWriter(new FileWriter(someFile)); 

ném FileNotFoundException. Ừ, không đùa đâu. Tôi đang cố tạo ra nó sau tất cả. Tôi có cần phải chia nhỏ đường dẫn tệp thành các thành phần, tạo các thư mục và sau đó tạo tệp trước khi khởi tạo đối tượng FileWriter không?

Trả lời

16

Trước tiên, bạn phải tạo tất cả các thư mục trước. Và here là cách thực hiện. Bạn cần tạo đối tượng File đại diện cho đường dẫn bạn muốn tồn tại và sau đó gọi .mkdirs() trên đó. Sau đó, đảm bảo bạn create tệp mới.

final File parent = new File("someDirA/someDirB/someDirC/"); 
if (!parent.mkdirs()) 
{ 
    System.err.println("Could not create parent directories "); 
} 
final File someFile = new File(parent, "filename.txt"); 
someFile.createNewFile(); 
+0

Xin cảm ơn, nhưng có một vài bit không thực tế ở trên. Thứ nhất, bạn có thể gọi mkdirs() trên các thư mục hiện có và nó sẽ đơn giản trả về false thay vì ném một ngoại lệ. Ngoài ra, trong trường hợp của tôi, một khi các thư mục được tạo ra, tôi có thể bỏ qua bước createNewFile() và đi thẳng đến bước FileWriter. –

+1

createNewFile() là dự phòng do đó giảm xuống. – EJP

+2

createNewFile() là dư thừa nhưng phần còn lại của mã hoạt động tốt. Do đó upvoting. –

Các vấn đề liên quan