The system cannot find the path specified with FileWriter

28,362

Solution 1

In general, a non existent file will be created by Java only if the parent directory exists. You should check/create the directory tree:

  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);

Solution 2

You can use getParentFile (Java Doc) to make sure that the parent directory exists. The following will check that the parent directory exists, and create it if it doesn't.

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

Solution 3

I'd guess that the "output" directory doesn't exist. Try adding:

new File(System.getProperty("user.dir") + File.separator + "output").mkdir();
Share:
28,362

Related videos on Youtube

rfgamaral
Author by

rfgamaral

Updated on July 09, 2022

Comments

  • rfgamaral
    rfgamaral almost 2 years

    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());
            }
        }
    

    But I get this error:

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

    Any idea why?

    I'm using NetBeans on Windows 7 if it matters...

    • Mitch Wheat
      Mitch Wheat almost 14 years
      also minor point, it's generally good form to use Path.Combine() ...
    • rfgamaral
      rfgamaral almost 14 years
      No, but as I'm trying to write and not read, I thought the path/file would be created automatically...
    • Brett Kail
      Brett Kail almost 14 years
      Path.Combine probably isn't a great suggestion for Java :-).
  • Glennn
    Glennn about 13 years
    I think you may need to replace "myFile.getParent()" (which returns a String) with "myFile.getParentFile()".

Related