2

Linux 中的许多命令采用两种输入方式之一,标准输入,或作为文件的参数。例子

echo "来自标准输入的文本" | lpr

lpr 文件名.txt

echo "来自标准输入的文本" | 荷兰语

nl 文件名.txt

awk、sed、grep 和许多其他方法也是如此。用 Java 编写的命令行应用程序怎么会发生同样的行为?我相信 System.in 代表标准输入。阅读标准输入并不困难。从文件中读取并不难,但是应用程序如何根据命令行调用它的方式进行操作?

4

4 回答 4

0

基本上,您必须解析传递给您的 java 应用程序的参数。这些参数将指示您的程序逻辑如何处理传递给标准输入的信息。

您可以使用此处显示的简单方法解析参数 http://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html

或者您可以使用此处提到的强大库

如何在 Java 中解析命令行参数?

于 2013-08-27T03:58:00.240 回答
0

您处理方法的参数main(String[] args)。如果提供了一个参数,args[0]它将是非空的,因此您可以假设/验证它是一个文件名。否则,假设/验证输入是通过标准输入提供的。

在代码中:

 public static void main(String[] args) {
  if (args.length > 0) {
       String filename = args[0];
       ... // process the file
  }
  else { 
     Scanner sc = new Scanner(System.in);
     ... // process STDIN
   }
 }
于 2013-08-27T03:42:58.980 回答
0

这只是编程。例如:

   public class Main {

       public void run(OutputStream out) {
           // Write output to 'out'
       }

       public static void main(String[] args) {
           if (args.length == 1) {
               try (FileOutputStream out = new FileOutputStream(args[0])) {
                   new Main().run(out);
               }
           } else {
               new Main().run(System.out);
           }
       }
    }

此版本假定第一个参数是输出文件名,如果没有给出文件名,则写入标准输出。你可以对标准输入做同样的事情,你可以不同地处理参数。


out注意:您可以使用System.setOut(...)修改 JVM 的System.out“变量”而不是使用参数。但我更喜欢这样做,因为它使应用程序逻辑更可重用。(考虑您想Main在更大的应用程序中嵌入/使用该类的情况......用于System.out其他目的。)

于 2013-08-27T03:43:26.673 回答
0

您可以执行典型的 unix 程序所做的事情...检查命令行参数(传递给main(String[] args)方法,如果没有给出适当的输入文件,则使用System.in.

于 2013-08-27T03:44:39.620 回答