kei*_*bel 11 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() );
}
}
Run Code Online (Sandbox Code Playgroud)
每次运行我的应用程序时,都会发生以下异常:
java.io.IOException: The system cannot find the path specified
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(Unknown Source)
[...]
Run Code Online (Sandbox Code Playgroud)
我怎么摆脱它?(我使用的是Win7 64bit btw)
小智 15
问题是除非整个包含路径已经存在,否则无法创建文件 - 它的直接父目录和它上面的所有父项.
如果你有一个路径c:\ Temp并且它下面没有子目录,并且你尝试创建一个名为c:\ Temp\SubDir\myfile.txt的文件,那将失败,因为C:\ Temp\SubDir不存在.
之前
xpath.toFile().createNewFile();
Run Code Online (Sandbox Code Playgroud)
加
xpath.toFile().mkdirs();
Run Code Online (Sandbox Code Playgroud)
(我不知道如果mkdirs()要求只是在对象的路径;如果确实如此,那么更改新行
new File(destDir).mkdirs();
Run Code Online (Sandbox Code Playgroud)
否则,您将创建您的文件名作为子目录!您可以通过检查Windows资源管理器来查看它创建的目录,从而验证哪个是正确的.)