我是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
---------------------------------------
答案 0 :(得分:1)
写一个字符。
参数: 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.out
是PrintStream
;要获得相同的行为,请尝试使用您的文件名实例化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());