我正在使用Java开发一个项目,我必须让用户将命令行参数与UNIX中的相似,以执行某些功能。
例如,如果我的程序名是foo.java:
//So when I compile it
javac foo.java <Enter>
//Run it
java foo <Enter>
//Input Argument
list <Enter>
<List of all the users>
我知道我们可以使用java传递命令行参数,例如java foo list,但是如果我不必传递命令行参数并且必须将参数作为Unix shell命令传递。任何例子都会有帮助!
由于
答案 0 :(得分:1)
听起来您希望能够通过管道提供输入,例如
echo arg1 arg2 arg3 | java foo
为此,您的程序必须读取标准输入。这通常使用Scanner类来完成。
以下是一个简短的例子:
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
String input = console.nextLine();
System.out.println(input);
}
}
使用java ScannerTest
调用将等到用户输入一行并点击返回。使用echo "Hello, world!" | java ScannerTest
调用基本上立即完成,因为Java不将键盘用作标准输入,而是将管道视为标准输入。
答案 1 :(得分:0)
我相信你想要创建一个命令行java应用程序,其运行方式与linux程序类似。
我认为一个不错的选择是使用https://argparse4j.github.io/库。您可以查看他们的样本,因为它非常直观:
ArgumentParser parser = ArgumentParsers.newArgumentParser("Checksum")
.defaultHelp(true)
.description("Calculate checksum of given files.");
parser.addArgument("-t", "--type")
.choices("SHA-256", "SHA-512", "SHA1").setDefault("SHA-256")
.help("Specify hash function to use");
parser.addArgument("file").nargs("*")
.help("File to calculate checksum");
Namespace ns = null;
try {
ns = parser.parseArgs(args);
} catch (ArgumentParserException e) {
parser.handleError(e);
System.exit(1);
}
然后你可以这样打电话: $ java Checksum -h