【问题标题】:Command line parameters in JavaJava中的命令行参数
【发布时间】:2017-03-04 08:21:00
【问题描述】:

我正在开发一个 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 命令传递。任何例子都会有所帮助!!

谢谢

【问题讨论】:

  • 我不知道你的问题是什么。
  • 您是否在程序运行期间将命令行参数与用户输入混淆了?
  • by list 你的意思是执行 java foo list 并输出列表吗?
  • 我认为问题是如何从 Java 管道中读取标准输入。
  • RAZ_Muh_Taz .. 我想你明白了。我正在寻找如何在程序运行期间从命令行传递用户输入。

标签: java bash command-line-arguments javac


【解决方案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 不将键盘用作标准输入,而是将管道视为标准输入。

【讨论】:

    【解决方案2】:

    我相信您想创建一个命令行 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 校验和 -h

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2013-04-09
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多