2012-08-26 34 views
7

Tôi đang cố gắng tạo một thư mục nhưng dường như nó thất bại mỗi lần? Tôi đã kiểm tra rằng nó không phải là một vấn đề cho phép quá, tôi có toàn quyền để ghi vào thư mục đó. Cảm ơn trước.Java - mkdir() không viết thư mục

Đây là mã:

private void writeTextFile(String v){ 
    try{ 

     String yearString = convertInteger(yearInt); 
     String monthString = convertInteger(month); 
     String fileName = refernce.getText(); 
     File fileDir = new File("C:\\Program Files\\Sure Important\\Report Cards\\" + yearString + "\\" + monthString); 
     File filePath = new File(fileDir + "\\"+ fileName + ".txt"); 
     writeDir(fileDir); 
     // Create file 
     FileWriter fstream = new FileWriter(filePath); 
     try (BufferedWriter out = new BufferedWriter(fstream)) { 
      out.write(v); 
     } 
    }catch (Exception e){//Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
    } 
} 

private void writeDir(File f){ 
    try{ 
     if(f.mkdir()) { 
      System.out.println("Directory Created"); 
     } else { 
     System.out.println("Directory is not created"); 
     } 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public static String convertInteger(int i) { 
    return Integer.toString(i); 
} 

Calendar cal = new GregorianCalendar(); 
public int month = cal.get(Calendar.MONTH); 
public int yearInt = cal.get(Calendar.YEAR); 

Đây là kết quả:

Directory is not created 
Error: C:\Program Files\Sure Important\Report Cards\2012\7\4532.txt (The system cannot find the path specified) 

Trả lời

24

Đó là có thể bởi vì File.mkdir tạo thư mục chỉ khi thư mục cha tồn tại. Hãy thử sử dụng File.mkdirs để tạo tất cả các thư mục cần thiết.

Đây là mã làm việc cho tôi.

private void writeDir(File f){ 
    try{ 
     if(f.mkdirs()) { 
      System.out.println("Directory Created"); 
     } else { 
     System.out.println("Directory is not created"); 
     } 
    } catch(Exception e){ 
      // Demo purposes only. Do NOT do this in real code. EVER. 
      // It squashes exceptions ... 
     e.printStackTrace(); 
    } 
} 

Sự thay đổi duy nhất tôi làm là để thay đổi f.mkdir() để f.mkdirs() và nó làm việc

+0

Cheers điều đó dường như là vấn đề, tôi sẽ chấp nhận câu trả lời khi nó alows tôi :) CẢM ƠN!!! – Nick

+1

Vì phần "động" của tên đường dẫn có hai thư mục, tôi muốn nói lý thuyết này là khá tốt ... –

+1

Tôi đã sao chép mã của bạn, đổi nó thành mkdirs() và nó hoạt động. Chỉnh sửa để bao gồm mã có liên quan –

6

Tôi nghĩ rằng @La bla bla đã đóng đinh nó, nhưng chỉ cho đầy đủ, đây là tất cả những điều mà tôi có thể nghĩ về có thể gây ra một cuộc gọi đến File.mkdir() thất bại:

  • một lỗi cú pháp trong tên đường dẫn; ví dụ. một ký tự không hợp lệ trong thành phần tên tệp
  • Thư mục chứa thành phần thư mục cuối cùng không tồn tại.
  • Đã có thứ gì đó với tên đó.
  • Bạn không có quyền tạo một thư mục trong thư mục cha
  • Bạn không có quyền thực hiện một tra cứu trong một số thư mục trên con đường
  • Thư mục được tạo ra là một chỉ đọc hệ thống tập tin.
  • Hệ thống tệp đã phát sinh lỗi phần cứng hoặc lỗi liên quan đến mạng.

(Rõ ràng, một số trong những khả năng có thể nhanh chóng loại bỏ trong bối cảnh của câu hỏi này ...)

+0

CẢNH BÁO CHO WINDOWS7. Tôi chỉ lãng phí thời gian khám phá ra rằng nếu một tên tập tin có chứa bất kỳ phần thư mục nào là một trong những từ kế thừa Window7 (đó là: CON, PRN, AUX, CLOCK $, NUL, COM1-COM9, LPT1-LPT9 ... như chúng ta đã biết ... không phải chúng ta?) thì mkdir sẽ thất bại mà không có cảnh báo hay giải thích hợp lý rõ ràng. Tìm thấy trong Java 7 b51 - nó có thể không ảnh hưởng đến các phiên bản Java hoặc các ngôn ngữ lập trình khác. Nó không ảnh hưởng đến shell DOS cmd. –

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