Параметры командной строки в Java

#java #bash #command-line-arguments #javac

#java #bash #аргументы командной строки #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. Любой пример помог бы!!

Спасибо

Комментарии:

1. Я понятия не имею, в чем заключается ваш вопрос.

2. вы путаете аргументы командной строки с пользовательским вводом во время выполнения вашей программы?

3. под списком <enter> вы подразумеваете выполнение java foo list и вывод списка?

4. Я думаю, вопрос в том, как прочитать стандартный ввод из канала в Java.

5. RAZ_Muh_Taz .. Думаю, вы меня поняли. Я ищу, как передавать пользовательские данные из командной строки во время запуска программы.

Ответ №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 будет ждать, пока пользователь не введет строку и не нажмет return. Вызов с помощью 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