对于大字符串(60MB 或这么长),FileWriter
将额外的 null
添加到我的文件末尾。对于小字符串,此代码按预期工作。
为清楚起见,dat 和 filePath 是字符串。
FileWriter fstream = new FileWriter( filePath );
fstream.write( dat );
fstream.close();
File f = new File( filePath );
System.out.println("Data: " + dat.length() + ", File: " + f.length());
简而言之,在什么情况下,两次打印的值应该不同?
这是我的示例输出:
Data: 63833144, File: 63833728
出于某种原因,我在文件末尾得到了 584 个额外的 null
。我发现字符串可能被过度分配是合理的,但这些不应该打印到文件,对吧?更糟糕的是,如果我明确地给它长度:
fstream.write(dat, 0, dat.length());
行为是一样的。巧合的是,如果我说 (dat.length() - 584),它会做我想做的,但仅限于这种特定情况。
有什么想法吗?
JDK 版本:1.7.0_02
已编辑:为变量添加文件类型(均为字符串)
最佳答案
什么是“达”?如果“dat”是一个StringBuffer,你需要小心。如果 StringBuffer 的长度大于其内容,则将在末尾附加空值。您可以尝试使用 dat.toString()。我相信空字符将在转换中被修剪。
关于java - FileWriter 在文件末尾写入额外的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14286963/