我需要将字符写入文件或标准输出。我很好奇是否可以用一种方法来完成。
现在我有这样的事情:
OutputStream out;
if(toConsole)
out = System.out;
else
out = new FileOutputStream(file);
write(out);
}
void write (OutputStream str){
....
str.write(string);
但这是我正在使用的问题(如果“ str”是System.out)写而不是打印?(打印java doc:“根据平台的默认字符编码将字符串的字符转换为字节”)如果要使用PrintWriter(或PrintStream)作为参数,则无法使用BufferedWriter,并且写入文件的速度会变慢。
可以使用相同的代码(和相同的方法)来写入文件和System.out吗?(这是为我的学校项目设计的,因此我希望它是“纯”且完全正确的)
您要完成的工作是将文件输出和控制台输出视为相同。这是可能的,因为System.out
是PrintStream
,您可以PrintStream
为这样的文件创建一个
new PrintStream(yourFile)
或BufferedOutputStream
在两者之间插入
new PrintStream(new BufferedOutputStream(new FileOutputStream(yourFile))).
请注意,这不是必需的,因为它本身PrintStream
会缓冲其输出。
我将创建一个变量(全局变量或非全局变量),以表示当前输出。这可能是一个PrintStream
,要么System.out
,或PrintStream
周围FileOutputStream
,无论你的愿望。然后,您可以将此流传递给write方法或直接在其上调用print方法。
这样做的好处是,您无需进行大量代码修改即可轻松切换此设置,也可以将其重定向到任何您不想使用的位置。将其重定向到文件并 没有问题System.out
!当前编写该方法的方式不会获得纯粹的灵活性。
您可以(不是说应该这样做),也System.out
可以使用直接重定向System.setOut
。但是,这是不好的风格,因为它很不常见,如果其他人尚未看到对的调用,可能会使其他人感到困惑System.setOut
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句