我正在获取列表中的一些数据,我正在飞行中写入文件 有两个列表,他们有croos joi,并且该文件通过缓冲编写器写入文件,如图所示现在的问题是完整的数据不是写在一个文件中 总共有907864行,然后有905864行,请在我写文件时告知为什么fe行丢失...
File file = new File(FilePath + getFileName());
if (file.exists()) {
file.delete();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for (Posuser posuser : totalusers) {
for (potook bk : books) {
if ((posuser.getUpdatedBy() == null)
&& (posuser.getUpdateddateformat() == null)) {
bw.write("aaa"+"\r\n");
} else if (posuser.getUpdatedBy() == null
&& posuser.getUpdateddateformat() != null) {
bw.write("bbb+"\r\n");
} else if (posuser.getUpdatedBy() != null
&& posuser.getUpdateddateformat() == null) {
bw.write("ccc"+"\r\n");
}
else
bw.write("ddd"+\r\n");
}
}
bw.flush();
bw.close();
} catch (Exception e) {
logger.error(e.getMessage());
}
}
答案 0 :(得分:0)
似乎是要删除已创建/现有的文件
if (file.exists()) {
file.delete();
}
替代方案是:
if(!file.createNewFile()){
System.out.println("File Exists");
}
答案 1 :(得分:0)
一种可能的解释是,这种情况正在发生,因为您的代码无法可靠地刷新输出:
try {
....
bw.flush();
bw.close();
} catch (Exception e) {
logger.error(e.getMessage());
}
如果在“...”部分中抛出任何异常,则不会执行flush
和close
次调用。相反,该方法将(很可能)跳转到Exception
的处理程序并记录错误。
写这个的正确方法是你要确保输出被刷新/关闭是这样的:
File file = new File(FilePath + getFileName());
try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
for (Posuser posuser : totalusers) {
for (potook bk : books) {
if ((posuser.getUpdatedBy() == null)
&& (posuser.getUpdateddateformat() == null)) {
bw.write("aaa"+"\r\n");
} else if (posuser.getUpdatedBy() == null
&& posuser.getUpdateddateformat() != null) {
bw.write("bbb+"\r\n");
} else if (posuser.getUpdatedBy() != null
&& posuser.getUpdateddateformat() == null) {
bw.write("ccc"+"\r\n");
} else {
bw.write("ddd"+\r\n");
}
}
}
} catch (IOException, AnotherException e) {
logger.error(e.getMessage());
}
注意:
BufferedWriter
。这就是为什么没有明确的close()
。 (如果您不能使用Java 7,请在close()
块中执行finally
。flush()
和close()
。首先关闭BufferedWriter
隐式刷新和缓冲数据。Exception
。捕获您所期望的已检查异常和特定未经检查的异常。如果你抓住Exception
,你就有可能发现错误的异常,这些异常实际上是由于错误造成的。此外,如果存在的话,删除文件的代码是不必要的。当您按照自己的方式打开文件时,如果存在文件,它将截断现有文件。