说到标准输入(Standard Input)和命令行参数(args),很多人可能会有点懵,但是看到args,又能起一点反应:这不就是那个、那个、那个什么么。下面就简单介绍下标准输入(Standard Input)和命令行参数(args)
ls -l
echo "Hello, World!" | grep "World"
上面的两个命令,哪一个执行了标准输入(Standard Input)?哪一个是命令行参数(args)?
标准输入(Standard Input,stdin)
定义
标准输入是一种基于流的输入方式,通常用于接收用户的动态输入或从其他程序传递的数据。它是一个字符流,数据可以来自键盘、文件或其他输入设备。
- echo 'hello word' | grep 'word'
- grep 'word' < demo.txt
命令行参数(args)
定义
命令行参数是指用户在运行程序时,通过命令行传递给程序的附加信息。这些参数通常用于向程序提供运行时所需的输入数据或配置选项。命令行参数是程序启动时从外部获取数据的一种方式,它们在程序运行之前就已经确定。
- ls -l
下面通过一个java的代码,演示一下如何从标准输入和args里取值
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
// 处理命令行参数
System.out.println("Command-line arguments:");
for (int i = 0; i < args.length; i++) {
System.out.println("Argument " + i + ": " + args[i]);
}
// 从标准输入读取数据 这里是读键盘输入的值
System.out.println("Enter some text (type 'exit' to quit):");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String line;
while ((line = reader.readLine()) != null) {
if ("exit".equalsIgnoreCase(line.trim())) {
System.out.println("Exiting...");
break;
}
System.out.println("You entered: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
假如你想从TXT文件写入,可以使用:
java -jar demo.jar arg1 arg2 < demo.txt
总结
- 标准输入 适用于需要动态输入数据的场景,例如交互式程序或从文件、管道中读取数据。
- 命令行参数 适用于需要在程序启动时传递固定值的场景,例如配置程序行为或传递文件名等。