java - FileWriter 在文件末尾写入额外的空值

标签 java string file-io filewriter

对于大字符串(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/

相关文章:

java - 如何使用 JAR 文件中的外部类作为我的程序中的类之一?

java - GWT SuggestBox : Rich suggestions instead of just text?

java - 添加文本文件中的值

javascript - IE7 Javascript 和使用字符串作为数组

c++ - 命名管道中的多个写入文件和读取文件

java - 为回收器适配器中的一个数组项膨胀两个 View

c - 请告诉我我做错了什么,因为 Monthstr2num 返回的值是错误的

c - 使用 C 将数据文件存储到二维数组中

java - 在 Java 中删除随机访问文件的第一个字节

java - 为什么我的代码给出 IOException(系统找不到指定的文件)?