File.createNewFile() 僅在父目錄已存在時才能創建文件,否則返回 false 且不拋異常。許多新手誤以為會自動創建目錄。
File file = new File("D:/data/logs/app.log");
// 關鍵:先確保父目錄存在
File parent = file.getParentFile();
if (parent != null && !parent.exists()) {
boolean ok = parent.mkdirs(); // 創建多級目錄
if (!ok) throw new IOException("無法創建目錄: " + parent);
}
// 再創建文件
if (file.createNewFile()) {
System.out.println("文件創建成功");
}
| 方法 | 作用 | 是否創建父目錄 |
|---|---|---|
createNewFile() | 創建空文件 | 否 |
mkdir() | 創建單級目錄 | 否(父目錄必須存在) |
mkdirs() | 創建多級目錄 | 是 |
public static File ensureFile(String path) throws IOException {
File f = new File(path);
File p = f.getParentFile();
if (p != null && !p.exists() && !p.mkdirs()) {
throw new IOException("創建目錄失敗: " + p);
}
if (!f.exists() && !f.createNewFile()) {
throw new IOException("創建文件失敗: " + f);
}
return f;
}
/ 與 \\,建議統一用 / 或 File.separator。\\?\ 前綴繞過。