当且仅当该文件不存在时,我想创建一个文件。
作为示例文件位置是指“C:\ user \ Desktop \ dir1 \ dir2 \ filename.txt”
if (!file.exists()) {
try {
file.createNewFile();
} catch(IOException ioe) {
ioe.printStackTrace();
return;
}
}
不幸的是上面的代码失败了,因为dir1
和dir2
不存在。
对于我的案例
如何干净地检查?
我正在考虑添加以下检查来处理这种情况:
if (!file.getParentFile().getParentFile().exists()) {
file.getParentFile().getParentFile().mkdirs();
}
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (!file.exists()) {
try {
file.createNewFile();
} catch(IOException ioe) {
ioe.printStackTrace();
return;
}
}
或者有更明确的解决方案吗?
答案 0 :(得分:7)
你可以做这类事情:
file.getParentFile().mkdirs();
创建此抽象路径名所指定的目录,包括任何必要但不存在的父目录。请注意,如果此操作失败,则可能已成功创建了一些必要的父目录。
<强>更新强>
if (file.getParentFile().exists || file.getParentFile().mkdirs()){
try
{
file.createNewFile();
}
catch(IOException ioe)
{
ioe.printStackTrace();
return;
}
} else {
/** could not create directory and|or all|some nonexistent parent directories **/
}
答案 1 :(得分:1)
请注意File.exists()
检查是否存在文件或目录。
而不是:
if(!file.exists()) {
try {
file.createNewFile();
} catch(IOException ioe) {
ioe.printStackTrace();
return;
}
}
您应该明确检查文件是否是文件,因为可能存在同名目录:
if(!file.isFile()) {
try {
file.createNewFile();
} catch(IOException ioe) {
ioe.printStackTrace();
return;
}
}
同样,您应检查父文件是否为目录:
if (!file.getParentFile().getParentFile().isDirectory()) { ... }