Java 中的标准输入与命令行

问题描述 投票:0回答:3

虽然操作系统中的每个命令行进程都可能使用标准输入、标准输出和标准错误数据流,但我对命令行参数和标准输入感到困惑。

也许我的理解不正确。但对我来说,标准输入似乎是除了命令行之外将数据输入程序的另一种方式。如果您帮助我理解其中的差异,我将不胜感激。

提前致谢。

java stream operating-system
3个回答
1
投票

考虑到 Java 与任何其他程序的标准输入处理没有区别(至少在 Linux 下)。 JVM 中的标准输入继承自父级的标准输入。和“命令行”不是同一个概念。

考虑Linux中的

someProg arg1 arg2 <file
:标准输入是指定的文件,而不是命令行。

所有进程均通过命令行启动;在本例中它包含

someProg arg1 arg2
。当进程启动时,命令行已经设置完毕;从启动过程的角度来看,这就是它的本质。

相比之下,标准输入是一个输入文件(由描述符标识),程序可以根据需要从中读取输入。默认情况下它是控制台,但如图所示,父进程(在本例中为 shell)可以重定向它(在本例中,从名为

file
的文件中读取)。

但是,关于 Java 编程需要注意的一点是,正在运行的程序实际上是 Java(JVM)本身。命令行的一部分是针对 JVM 的,其他部分是针对用 Java 编写的程序的。 Java 文档将区分两者。


0
投票

在执行 C 程序时,可以将一些值从命令行传递给它们。这些值称为命令行参数,很多时候它们对您的程序很重要,特别是当您想从外部控制程序而不是在代码内对这些值进行硬编码时。

命令行参数使用 main() 函数参数处理,其中 argc 指传递的参数数量(主要是整数),argv[] 是一个指针数组,指向传递给程序的每个参数(主要是字符数组/字符串) )。以下是一个简单的示例,它检查是否有从命令行提供的任何参数并采取相应的操作


0
投票

当你的应用程序需要立即输入运行时,使用命令行输入,例如在java中你这样写:

// CommandLineArgument.java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class CommandLineArgument {
    public static void main(String[] args) {

        if (args.length != 1) {
            System.out.println("Please provide exactly one file name as a command line argument.");
            return;
        }

        String filename = args[0];

        try {
            File file = new File(filename);
            Scanner fileScanner = new Scanner(file);

            while (fileScanner.hasNextLine()) {
                System.out.println(fileScanner.nextLine());
            }

            fileScanner.close();
            System.out.println("File contents printed successfully!");
        } catch (FileNotFoundException e) {
            System.out.println("Error: File not found: " + filename);
        }
    }
}

然后你像这样运行这个程序:

javac CommandLineArgument.java && java CommandLineArgument.java /path/to/file.txt

如您所见,整个程序是围绕一件事构建的,读取文件,因此如果我们立即使用文件运行程序,而不是运行程序,然后在让程序等待文件后,给出文件的路径,效果会更好来自标准输入,如下所示:

// StandardInputProgram.java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class StandardInputProgram {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter the file name: ");
        String filename = scanner.nextLine();

        try {
            File file = new File(filename);
            Scanner fileScanner = new Scanner(file);

            while (fileScanner.hasNextLine()) {
                System.out.println(fileScanner.nextLine());
            }

            fileScanner.close();
            System.out.println("File contents printed successfully!");
        } catch (FileNotFoundException e) {
            System.out.println("Error: File not found: " + filename);
        }
    }
}

在其他情况下,我认为标准输入更适合处理程序的输入。

© www.soinside.com 2019 - 2024. All rights reserved.