Горячий, чтобы избавиться от java.io.Exception в java.io.WinNTFileSystem.createFileExclusively? - PullRequest
11 голосов
/ 07 марта 2012

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

Я хочу создать файл в соответствии с заданными параметрами, но он не будет работать.

public static Path createFile(String destDir, String fileName) throws IOException {
        FileAccess.createDirectory( destDir);

        Path xpath = new Path( destDir + Path.SEPARATOR + fileName);

        if (! xpath.toFile().exists()) {
            xpath.toFile().createNewFile();
            if(FileAccess.TRACE_FILE)Trace.println1("<<< createFile " + xpath.toString() );
        }
      return xpath;
  }


  public static void createDirectory(String destDir) {
      Path dirpath = new Path(destDir);
      if (! dirpath.toFile().exists()) {
          dirpath.toFile().mkdir();
          if(TRACE_FILE)Trace.println1("<<< mkdir " + dirpath.toString() );
      }
  }

Каждый раз, когда я запускаю свое приложение, возникает следующее исключение:

java.io.IOException: The system cannot find the path specified
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(Unknown Source)
[...]

Как мне от этого избавиться?(Я использую Win7 64bit кстати)

1 Ответ

14 голосов
/ 07 марта 2012

Проблема в том, что файл не может быть создан, если не существует весь содержащий его путь - его непосредственный родительский каталог и все родительские каталоги над ним.

Если у вас есть путь c: \ Temp и нет подкаталогов под ним, и вы пытаетесь создать файл с именем c: \ Temp \ SubDir \ myfile.txt, который не будет выполнен, так как C: \ Temp \ SubDirне существует

До

   xpath.toFile().createNewFile(); 

добавить

   xpath.toFile().mkdirs(); 

(я не уверен, что mkdirs () требует просто путь в объекте;в противном случае измените эту новую строку на

   new File(destDir).mkdirs();

В противном случае вместо этого вы создадите имя файла в виде подкаталога! Вы можете проверить, какое из них правильное, проверив проводник Windows, чтобы увидеть, какие каталоги он создал.)

...