缓冲写入器与sys out print

时间:2016-07-16 22:06:09

标签: java bufferedwriter

我是java的新手,想要理解为什么这不起作用的原因。为什么sys out打印工作完美,但缓冲的编写器没有?我只是想了解两个/

之间的区别
//print the input matrix to the user

System.out.println("Matrix read: ");
System.out.println("------------------" +
                   "---------------------");
for (int i = 0; i < size; i++) {
    for (int j = 0; j < size; j++) {
        System.out.printf("%5d ", a[i][j]);
        bw.write(a[i][j]);
        bw.flush();
    }

    //print a blank line
    System.out.println();

缓冲的编写器输出(来自.txt文件):

     The Determinant is: 5
     The Determinant is: 3
     �The Determinant is: 64
�   ��  ���The Determinant is: 270
������   ���The Determinant is: 0
��������    ����The Determinant is: 270
������    The Determinant is: 0
    The Determinant is: 0

显示打印输出

Matrix read: 
---------------------------------------
    5 
---------------------------------------
Matrix read: 
---------------------------------------
    2     3 
---------------------------------------
    5     9 
---------------------------------------
Matrix read: 
---------------------------------------
    3    -2     4 
---------------------------------------
   -1     5     2 
---------------------------------------
   -3     6     4 
---------------------------------------

4 个答案:

答案 0 :(得分:1)

来自description of that method

  

写一个字符。

     

参数:       c - int指定要写入的字符

因此该方法不会将整数值写为文本。相反,它写出由整数表示的unicode字符。

要将其写成有意义的文字,您需要将其转换为String,如下所示:

String text = String.valueOf(a[i][j]);
bw.write(text, 0, text.length());

这会将其置于人类可读的表示中。

答案 1 :(得分:0)

使用write()编写字节。在第一个矩阵中,您有数值5.如果使用write(5),则编写字节值5,这是一个不可打印的字符,您正在使用的文本编辑器以某种方式显示。如果您使用hexdump实用程序,您会看到它实际上是字节5

printf函数添加一个格式字符串,用它告诉它如何格式化参数,即5%5d这里的意思是将数字格式化为字符串,其宽度至少为5,前面填充空格。然后是一个空格。

如果您希望对缓冲的编写器产生相同的效果,请将其包装在PrintWriter中并使用相同的printf方法和句柄,您将获得相同的结果。如果您只想将数字格式化为BufferedWriter中的字符串,则必须将您的数字转换为您编写的字符串,例如e。 G。使用Integer.toString(5).getBytes()然后使用相应的write()方法编写此字节数组。

答案 2 :(得分:0)

System.outPrintStream;要获得相同的行为,请尝试使用您的文件名实例化PrintStream(或PrintWriter)并使用print / println / format方法。< / p>

BufferedWriter.write(int c)方法将int参数解释为字符,因此如果您传递32,则会打印空格字符;这很可能不是你想要的。

答案 3 :(得分:0)

而不是使用

编写原始int
bw.write(a[i][j]);

(如果您希望将相同的内容写入BufferedWriter),则需要以相同的方式格式化输出。您可以使用String.format之类的内容,例如

bw.write(String.format("%5d ", a[i][j]));

而且,如果您希望它相同,则需要添加一个新行(您调用System.out.println的地方),例如

bw.write(System.lineSeparator());