Java BufferedWriter创建空字符

Sor*_*Hat 8 java bufferedwriter null-character java.util.scanner

我一直在使用Java的BufferedWriter来写一个文件来解析一些输入.但是,当我打开文件后,似乎添加了空字符.我尝试将编码指定为"US-ASCII"和"UTF8",但我得到了相同的结果.这是我的代码片段:

Scanner fileScanner = new Scanner(original);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "US-ASCII"));
while(fileScanner.hasNextLine())
  {
     String next = fileScanner.nextLine();
     next = next.replaceAll(".*\\x0C", ""); //remove up to ^L
     out.write(next);
     out.newLine();
  }
 out.flush();
 out.close();
Run Code Online (Sandbox Code Playgroud)

也许问题甚至不是BufferedWriter?

我把它缩小到这个代码块,因为如果我将它注释掉,输出文件中就没有空字符.如果我在VIM中进行正则表达式替换,则该文件为null-character free(:%s /.*^ L // g).

如果您需要更多信息,请与我们联系.

谢谢!

编辑: 正常线的hexdump看起来像:0000000 5349 2a41 3030 202a

但是当运行此代码时,hexdump看起来像:0000000 5330 2a49 4130 202a

我不确定为什么事情变得混乱了.

编辑: 此外,即使文件与正则表达式不匹配并贯穿该代码块,它也会出现空字符.

编辑: 这是差异的前几行的十六进制:http: //pastie.org/pastes/8964701/text

命令是:diff -y testfile.hexdump expectedoutput.hexdump

其余的线条与最后两条线条不同.

Stu*_*aie 9

编辑:看看你给出的hexdump diff,唯一的区别是一个有LF行结尾(0A)而另一个有CRLF行结尾(0D 0A).差异中的所有其他数据都向前移动以容纳额外的字节.

CRLF是您正在使用的操作系统上的默认行.如果要在输出中以特定行结束,请写入字符串"\n""\r\n".

以前我注意到Scanner没有指定字符集.它应该指定已知编码输入的适当的输入.但是,这不是意外输出的来源.