很高兴摆脱java.io.WinNTFileSystem.createFileExclusively的java.io.Exception?

时间:2012-03-07 10:22:02

标签: java windows file-io java.nio.file

我目前遇到的问题是我遇到了一个前所未见的异常,这就是为什么我不知道如何处理它。

我想根据给定的参数创建一个文件,但它不起作用。

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

1 个答案:

答案 0 :(得分:12)

问题是除非整个包含路径已经存在,否则无法创建文件 - 它的直接父目录和它上面的所有父目录。

如果你有一个路径c:\ Temp并且它下面没有子目录,并且你尝试创建一个名为c:\ Temp \ SubDir \ myfile.txt的文件,那将会失败,因为C:\ Temp \ SubDir不会存在。

之前

   xpath.toFile().createNewFile(); 

添加

   xpath.toFile().mkdirs(); 

(我不确定mkdirs()是否需要只是对象中的路径;如果是,则将该新行更改为

   new File(destDir).mkdirs();

否则,您将把您的文件名创建为子目录!您可以通过检查Windows资源管理器以查看它创建的目录来验证哪个是正确的。)