使用FileWriter时,系统找不到指定的路径

9

I have this code:

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 (系统找不到指定的路径)

有任何想法吗?

如果有影响的话,我正在Windows 7上使用NetBeans...


那个路径和文件是否存在? - Mitch Wheat
2
另外一个小点,通常最好使用 Path.Combine()…… - Mitch Wheat
1
不是的,但是因为我正在尝试编写而不是阅读,所以我认为路径/文件会自动创建... - rfgamaral
1
Path.Combine 可能不是 Java 的一个好建议 :-). - Brett Kail
3个回答

17

一般来说,只有父目录存在时,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);

我认为你可能需要用"myFile.getParentFile()"替换掉返回字符串的"myFile.getParent()"。 - Glennn

2
您可以使用 getParentFileJava文档)来确保父目录存在。以下代码将检查父目录是否存在,如果不存在则创建该目录。
File myFile =  new File(fileName);
if(!myFile.getParentFile.exists()) {
     myFile.getParentFile.mkdirs();
}

1
我猜测 "output" 目录不存在。尝试添加:
new File(System.getProperty("user.dir") + File.separator + "output").mkdir();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接