繁体   English   中英

Java写入File或System.out

[英]Java writing to File or System.out

我需要将字符写入文件或标准输出。 我很好奇是否可以用一种方法来完成。

现在我有这样的事情:

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:“字符串是根据平台的默认字符编码转换为字节的”)。

可以使用相同的代码(和相同的方法)来写入文件和System.out吗? (这是我的学校项目,因此我希望它是“纯”的并且完全正确)

您要完成的工作是将文件输出和控制台输出视为相同。 这是可能的,因为System.outPrintStream ,并且您可以为这样的文件创建PrintStream

new PrintStream(yourFile) 

或在两者之间插入BufferedOutputStream

new PrintStream(new BufferedOutputStream(new FileOutputStream(yourFile))).

请注意,这不是必需的 ,因为PrintStream 本身缓冲其输出

我将创建一个变量(全局变量或非全局变量),以表示当前输出。 您可以根据需要使用PrintStreamSystem.outFileOutputStream周围的PrintStream 然后,您可以将此流传递给write方法或直接在其上调用print方法。

优点是您无需进行大量代码修改即可轻松切换此设置,也可以将其重定向到不希望使用的位置。 将其重定向到文件 System.out没问题! 当前编写该方法的方式不会获得纯粹的灵活性。

可以 (不是说应该这样做),也可以使用System.setOut直接重定向System.out 但是,这是不好的样式,因为它很不常见,并且如果其他人尚未看到对System.setOut的调用,则可能会使其他人感到困惑。

System.out是PrintStream类型的对象。 是的,您可以写信给
使用完全相同的方法将System.out和/或另一个文件。 只是
构造一个PrintStream对象并将其定向到您的文件。 所以声明
将out变量作为PrintStream开始。

也可以看看:

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM