我知道如何使用字符串 args 从命令行获取输入,并且它input = args[0]
在我的输入位置上运行良好java.exe program s1.in
但我需要在终端中运行一个比较程序。所以我的输入必须有“<”符号。但是,我无法使用input = args[1]
. 当我输入这个时,args.length 变为 0。为什么会发生这种情况?
顺便说一句,有谁知道如何在谷歌中最好地搜索这种术语?Itthink google 无法识别搜索条目中的“<”。
谢谢
我知道如何使用字符串 args 从命令行获取输入,并且它input = args[0]
在我的输入位置上运行良好java.exe program s1.in
但我需要在终端中运行一个比较程序。所以我的输入必须有“<”符号。但是,我无法使用input = args[1]
. 当我输入这个时,args.length 变为 0。为什么会发生这种情况?
顺便说一句,有谁知道如何在谷歌中最好地搜索这种术语?Itthink google 无法识别搜索条目中的“<”。
谢谢
这是因为当您使用 时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);
}
}
}
它选择文件(如果可用)或标准输入流进行读取。
通常,最简单的方法是使用 Scanner:
Scanner scaner = new Scanner (System.in);