今天记录一下JAVA IO方面的一些细节问题
使用 Java 程序往磁盘写文件时碰到了这样的问题:文件写不全。
假如内容(StringBuffer/StringBuilder)有 100W 个字符,但是通过 Java 程序写到文件里的却不到 100W ,部分字符不见了。
代码大致是这样的:
private void writeToDisk() throws Exception {
File file = new File("FILE_PATH");
OutputStreamWriter osw = null;
osw = new OutputStreamWriter(new FileOutputStream(file));
osw.write("A HUGE...HUGE STRING");
}
文件是生成了。可内容不对,只写入了部分字符。
我甚至怀疑,是不是 StringBuffer/StringBuilder 也有长度限制?因为每次写入文件的字符都一样多。
后来,经旁人提醒,你 flush 了吗?遂恍然大悟。
正确的代码应该是这样的:
private void writeToDisk2() {
File file = new File("FILE_PATH");
OutputStreamWriter osw = null;
try {
osw = new OutputStreamWriter(new FileOutputStream(file));
osw.write("A HUGE...HUGE STRING");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}