使用时
file.createNewFile();
我收到以下异常
java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb
我想知道是否有创建缺少的父目录的createNewFile?
答案 0 :(得分:128)
你试过这个吗?
file.getParentFile().mkdirs();
file.createNewFile();
我不知道会执行此操作的单个方法调用,但它很容易作为两个语句。
答案 1 :(得分:11)
如果您确定用于创建文件的路径字符串包含父目录,即如果您确定路径的格式为<parent-dir>/<file-name>
,则Jon的答案有效。
如果没有,即它是<file-name>
格式的相对路径,则getParentFile()
将返回null
。
E.g。
File f = new File("dir/text.txt");
f.getParentFile().mkdirs(); // works fine because the path includes a parent directory.
File f = new File("text.txt");
f.getParentFile().mkdirs(); // throws NullPointerException because the parent file is unknown, i.e. `null`.
因此,如果您的文件路径可能包含或不包含父目录,则使用以下代码可以更安全:
File f = new File(filename);
if (f.getParentFile() != null) {
f.getParentFile().mkdirs();
}
f.createNewFile();
答案 2 :(得分:0)
从java7开始,您还可以使用NIO2 API:
void createFile() throws IOException {
Path fp = Paths.get("dir1/dir2/newfile.txt");
Files.createDirectories(fp.getParent());
Files.createFile(fp);
}