Системе не удается найти путь, указанный в FileWriter - PullRequest
5 голосов
/ 24 мая 2010

У меня есть этот код:

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 (система не может найти указанный путь)

Есть идеи почему?

Я использую NetBeans в Windows 7, если это имеет значение ...

Ответы [ 3 ]

12 голосов
/ 24 мая 2010

В общем случае 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);
2 голосов
/ 13 декабря 2013

Вы можете использовать getParentFile ( Java Doc ), чтобы убедиться, что родительский каталог существует.Следующее проверит, что родительский каталог существует, и создаст его, если это не так.

File myFile =  new File(fileName);
if(!myFile.getParentFile.exists()) {
     myFile.getParentFile.mkdirs();
}
1 голос
/ 24 мая 2010

Я предполагаю, что каталог "output" не существует. Попробуйте добавить:

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