2010-05-24 77 views
5

指定的路徑我有這樣的代碼:系統無法找到的FileWriter

private static void saveMetricsToCSV(String fileName, double[] metrics) { 
     try { 
      FileWriter fWriter = new FileWriter(
        System.getProperty("user.dir") + "\\output\\" + 
        fileTimestamp + "_" + fileDBSize + "-" + fileName + ".csv" 
      ); 

      BufferedWriter csvFile = new BufferedWriter(fWriter); 

      for(int i = 0; i < 4; i++) { 
       for(int j = 0; j < 5; j++) { 
        csvFile.write(String.format("%,10f;", metrics[i+j])); 
       } 

       csvFile.write(System.getProperty("line.separator")); 
      } 

      csvFile.close(); 
     } catch(IOException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 

但我得到這個錯誤:

C:\Users\Nazgulled\Documents\Workspace\Só Amigos\output\1274715228419_5000-List-ImportDatabase.csv (The system cannot find the path specified)

任何想法,爲什麼?

我使用的是Windows 7中的NetBeans如果它很重要...

+0

是否存在該路徑和文件? – 2010-05-24 15:43:36

+2

也是次要的一點,它通常是使用Path.Combine()的好形式... – 2010-05-24 15:44:07

+1

不,但由於我試圖寫和不讀,我認爲路徑/文件會自動創建... – 2010-05-24 15:47:23

回答

11

通常,只有當父目錄存在時,Java纔會創建不存在的文件。 您應該檢查/創建目錄樹:

String filenameFullNoPath = fileTimestamp + "_" + fileDBSize + "-" 
     + fileName + ".csv"; 
    File myFile = new File(System.getProperty("user.dir") + File.separator 
     + "output" + File.separator + filenameFullNoPath); 
    File parentDir = myFile.getParentFile(); 
    if(! parentDir.exists()) 
     parentDir.mkdirs(); // create parent dir and ancestors if necessary 
    // FileWriter does not allow to specify charset, better use this: 
    Writer w = new OutputStreamWriter(new FileOutputStream(myFile),charset); 
+0

我想你可能需要用「myFile.getParentFile()」替換「myFile.getParent()」(它返回一個字符串)。 – Glennn 2011-01-20 02:36:12

+0

@Glenn:你說得對,修好了 – leonbloy 2011-01-20 02:54:04

1

我猜「輸出」目錄不存在。嘗試添加:

new File(System.getProperty("user.dir") + File.separator + "output").mkdir(); 
1

您可以使用getParentFileJava Doc),以確保父目錄是否存在。以下將檢查父目錄是否存在,如果不存在則創建它。

File myFile = new File(fileName); 
if(!myFile.getParentFile.exists()) { 
    myFile.getParentFile.mkdirs(); 
} 
相關問題