1

我知道如何使用字符串 args 从命令行获取输入,并且它input = args[0]在我的输入位置上运行良好java.exe program s1.in

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

顺便说一句,有谁知道如何在谷歌中最好地搜索这种术语?Itthink google 无法识别搜索条目中的“<”。

谢谢

4

2 回答 2

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);
        }
    } 
}

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

于 2012-04-07T01:20:20.033 回答
0

通常,最简单的方法是使用 Scanner:

 Scanner scaner = new Scanner (System.in);
于 2012-04-07T02:13:43.063 回答