编程和命令行环境中的标准输入(Standard Input)和命令行参数(args)

98 阅读2分钟

说到标准输入(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

 总结

  • 标准输入 适用于需要动态输入数据的场景,例如交互式程序或从文件、管道中读取数据。
  • 命令行参数 适用于需要在程序启动时传递固定值的场景,例如配置程序行为或传递文件名等。