2012-03-07 8 views
8

Tôi hiện đang gặp vấn đề mà tôi gặp phải một ngoại lệ mà tôi chưa bao giờ thấy trước đây và đó là lý do tại sao tôi không biết cách xử lý nó.Hot để loại bỏ một java.io.Exception tại java.io.WinNTFileSystem.createFileExclusively?

Tôi muốn tạo tệp theo các tham số đã cho, nhưng nó sẽ không hoạt động.

public static Path createFile(String destDir, String fileName) throws IOException { 
     FileAccess.createDirectory(destDir); 

     Path xpath = new Path(destDir + Path.SEPARATOR + fileName); 

     if (! xpath.toFile().exists()) { 
      xpath.toFile().createNewFile(); 
      if(FileAccess.TRACE_FILE)Trace.println1("<<< createFile " + xpath.toString()); 
     } 
     return xpath; 
    } 


    public static void createDirectory(String destDir) { 
     Path dirpath = new Path(destDir); 
     if (! dirpath.toFile().exists()) { 
      dirpath.toFile().mkdir(); 
      if(TRACE_FILE)Trace.println1("<<< mkdir " + dirpath.toString()); 
     } 
    } 

Mỗi lần tôi chạy ứng dụng của tôi là ngoại lệ sau đây xảy ra:

java.io.IOException: The system cannot find the path specified 
at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
at java.io.File.createNewFile(Unknown Source) 
[...] 

Làm thế nào để thoát khỏi nó? (Tôi đang sử dụng Win7 64bit btw)

Trả lời

9

Vấn đề là không thể tạo tệp trừ khi toàn bộ đường dẫn chứa đã tồn tại - thư mục mẹ ngay lập tức và tất cả các bậc cha mẹ trên đó.

Nếu bạn có đường dẫn c: \ Temp và không có thư mục con bên dưới nó, và bạn cố gắng tạo tệp có tên c: \ Temp \ SubDir \ myfile.txt, điều đó sẽ bị lỗi vì C: \ Temp \ SubDir doesn ' t tồn tại.

Trước

xpath.toFile().createNewFile(); 

thêm

xpath.toFile().mkdirs(); 

(Tôi không chắc chắn nếu mkdirs() yêu cầu chỉ con đường trong đối tượng; nếu có, sau đó thay đổi dòng mới

new File(destDir).mkdirs(); 

Nếu không, bạn sẽ nhận được tên tệp của mình được tạo dưới dạng tiểu mục thay vào đó! Bạn có thể xác minh đó là chính xác bằng cách kiểm tra Windows Explorer của bạn để xem những thư mục mà nó tạo ra.)

+0

cảm ơn bạn, _new File (destDir) .mkdirs(); _ solution đã hoạt động! – keinabel

+0

Bạn được chào đón. – JTeagle