Java中的命令行参数

时间:2016-10-21 22:57:11

标签: java bash command-line-arguments javac

我正在使用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命令传递。任何例子都会有帮助!

由于

2 个答案:

答案 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