#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