如何处理命令行输入,如“java.exe program< s1.in”

时间:2012-04-07 01:18:06

标签: java input command-line-arguments javac

我知道如何使用字符串args从命令行获取输入,并且它在input = args[0]处理正常,我的输入为java.exe program s1.in

但是我需要在终端中运行一个比较程序。所以我的输入必须有“<”符号。但是,我无法使用input = args[1]获取输入值。当我输入时,args.length变为0.为什么会发生这种情况?

顺便说一句,有谁知道如何在谷歌中最好地搜索这种术语? Itthink谷歌不承认“<”在搜索条目中。

谢谢

2 个答案:

答案 0 :(得分:2)

这是因为当您使用xyzzy <inputfile时,您的shell运行xyzzy并将该文件“连接”到您的标准输入。然后,它希望您读取该标准输入以获取您的数据 - 您永远不会看到该参数,因为它已从命令行中删除(或者,更有可能,从未添加到您的参数列表中)。

这就是为什么许多程序会在给定文件时处理文件,否则他们会从标准输入中读取数据。而这正是你在这里需要做的。

为此,您可能需要以下内容:

import java.io.*;

class Test {
    public static void main(String args[]) {
        InputStreamReader inp = null;
        Boolean isStdIn = false;

        try {
            if (args.length > 0) {
                inp = new InputStreamReader(new FileInputStream(args[0]));
            } else {
                inp = new InputStreamReader(System.in);
                isStdIn = true;
            }

            // Now process inp.

            if (isStdIn)
                inp.close();

        } catch (Exception e) {
            System.exit(1);
        }
    } 
}

选择文件(如果可用)或标准输入流进行读取。

答案 1 :(得分:0)

通常,最简单的方法是使用扫描仪:

 Scanner scaner = new Scanner (System.in);