file.createNewFile()的if语句未触发,但文件可创建并追加内容
问题分析与解决
问题根因
你代码里的核心问题是FileWriter的创建时机早于createNewFile():
当你执行new FileWriter(exportFilePath, true)时,如果目标文件不存在,FileWriter会自动创建这个文件。等后续调用file.createNewFile()时,文件已经存在了,所以这个方法返回false,自然不会进入第一个if块。
而改用if (!file.createNewFile())每次触发,正是因为文件已经被FileWriter提前创建了,createNewFile()始终返回false,取反后为true。
至于file.length()==0能工作,是因为FileWriter创建的是空文件,文件长度为0,所以这个条件成立。
修复方案
调整代码顺序,先检查并创建文件,再初始化FileWriter:
String exportFilePath = "some/where/to/export/file.csv"; File file = new File(exportFilePath); boolean isNewFile = file.createNewFile(); FileWriter fileWriter = new FileWriter(exportFilePath, true); if (isNewFile) { System.out.println("Created File:\t" + file); fileWriter.append(String.join(",", headers)) .append("\n") .close(); } else if (file.length() == 0) { fileWriter.append(String.join(",", headers)) .append("\n") .close(); }
更严谨的写法建议用try-with-resources自动关闭流,避免资源泄漏:
String exportFilePath = "some/where/to/export/file.csv"; File file = new File(exportFilePath); boolean isNewFile = file.createNewFile(); try (FileWriter fileWriter = new FileWriter(exportFilePath, true)) { if (isNewFile || file.length() == 0) { fileWriter.append(String.join(",", headers)) .append("\n"); } } catch (IOException e) { e.printStackTrace(); }
补充说明
createNewFile()只有在文件原本不存在且成功创建时才返回true;如果文件已存在,直接返回false。- FileWriter的追加模式(第二个参数为true)不会覆盖已有文件,但会自动创建不存在的文件,这是你之前逻辑冲突的关键。
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

