当前位置: 首页 > 面试题库 >

Java控制台应用程序:System.out还是要走的路吗?

蓝恩
2023-03-14
问题内容

System.out由于公共领域的原因,使用(和相关)总是显得很尴尬,而现在使用最新的Netbeans则给出了一个明显的“声明应删除”提示。

因此,我的问题是:System.out仍然是编写控制台的首选方法,还是还有其他应首选的API?

编辑: 我不希望这用于日志记录,但对于一个简单的控制台应用程序。诸如此类的东西会将ps正在运行的进程打印到控制台。


问题答案:

在旨在从命令行运行的命令中,合理使用(IMO)System.outSystem.err用于输出以及用户可能期望理解的错误消息。如果您从一个不错的shell或脚本中运行应用程序,则System.outand
/ or System.err流可能会重定向到文件或管道中的另一个进程,但这是用户的选择。

在JDK
1.6和更高版本中,java.io.Console允许您的应用程序访问控制台。它在Javadoc中没有详细说明,但我怀疑会java.io.Console向控制台打开一个新的流,因此无法重定向。(从道德上讲,在老式的UNIX框上打开“
/ dev / tty”是等效的。)只有在您的应用程序希望确保它正在与用户对话且没有任何重定向的可能性时,才应使用它。例如,在请求和读取密码时。

但是请注意,这Console不能保证正常工作。实际上,可以观察到,当您从Eclipse …以及其他IDE中运行应用程序时,它不起作用。

但是,如果您的应用程序是GUI命令,特别是如果它打算作为无人值守服务运行,则应避免“写入控制台”,因为:

  • 控制台流(System.{out,err}java.io.Console)可能没有连接,或者
  • 用户可能不会注意到控制台输出,因为控制台窗口被掩埋了1,或者
  • 控制台输出可能最终使用户烦恼,尤其是在您的应用程序无法抑制它的情况下。

1-根据控制台输出的性质,这实际上可能恰恰是用户想要的。但是应用程序程序员需要考虑到这一点。



 类似资料:
  • 问题内容: 所有, 我已经用Java编写了基于命令行的PhoneBook应用程序。该应用程序基本上会询问用户的一些详细信息,例如姓名,年龄,地址和电话号码,并将它们存储在文件中。其他操作包括按名称,电话号码等查找电话簿。所有详细信息都通过控制台输入。 我正在尝试为我已实现的每个功能编写JUnit测试用例,但无法弄清楚如何将实现代码重定向到我的JUnit测试方法中的某个东西,当我的实际代码停止供用户

  • 问题内容: 我一直在尝试从Java应用程序中检索“ unicode用户输入”,以获得一个小的实用程序片段。问题是,它似乎在“开箱即用”的Ubuntu上运行,我猜它在UTF-8上具有操作系统范围的编码,但是从“ cmd”运行时在Windows上不起作用。考虑的代码如下: 在Ubuntu上的输出(不对配置进行任何更改): 在Windows CMD提示符下输出(绝不受JAVA_TOOL_OPTIONS影

  • 问题内容: 我正在用Java和gradle编写控制台应用程序。我正在使用插件,并在中正确配置了必填字段。 在我的主班里,我与有联系。这是问题所在:当我在项目目录中运行时,阅读器不会等待控制台输入。而是在第一次通话时返回。对于我在做什么,这种行为是不可取的。 解决办法是什么?是否有用于gradle的单独的控制台应用程序插件,或者我需要以某种方式调整插件以适合我的需要? 问题答案: 默认情况下,gra

  • 问题内容: 例如,代替打印 / - \ / 在新行上制作,使其停留在一行上,并且是动画吗? 问题答案: 是的,打印(退格)以删除最后一个字符。简而言之: 请注意,这并不在Eclipse控制台中由于错误工作。但是,在命令控制台中,它应该可以正常工作。

  • 问题内容: 在阅读有关Java I / O的知识时,我意识到可以通过两种方式写入标准输出。 以下是同时使用这两种技术的代码段 相对于其他使用,是否有任何性能优势? 问题答案: 一个快速的Google透露了Coderanch上的一个线程很有用。 还有其他几种进行控制台编写的方法,但是除了编写更少的代码外,使用一种或另一种似乎没有真正的好处,而且创建新的PrintWriter对象最终会占用更多的内存。

  • 问题内容: 我正在用Java编写一个简单的控制台应用程序(80x24),是否有等效的gotoxy(x,y)? 问题答案: 如果要通过gotoxy(x,y)将光标重新定位在控制台上特定的位置,则通常可以使用VT100控制代码来执行此操作。参见http://www.termsys.demon.co.uk/vtansi.htm。 做类似的事情 它将光标移动到控制台上的位置10,10。