Java中的标准输入与命令行

iyzzxitl  于 5个月前  发布在  Java
关注(0)|答案(3)|浏览(67)

虽然操作系统中的每个命令行进程都可能使用标准输入、标准输出和标准错误数据流,但我对命令行参数和标准输入感到困惑。
也许我的理解是不正确的.但对我来说,它看起来像标准输入是另一种方式来获取数据到程序中,除了命令行.我将不胜感激,如果你帮助我理解的差异.
先谢了。

kmpatx3s

kmpatx3s1#

考虑到Java和其他程序对标准输入的处理,这并没有什么区别(至少在Linux下)。JVM中的标准输入是从父程序的标准输入继承而来的。“命令行”不是同一个概念。
考虑Linux中的someProg arg1 arg2 <file:标准输入是命名文件,而不是命令行。
所有进程都是通过命令行启动的;在本例中,它包含someProg arg1 arg2。当进程启动时,命令行已经设置好了;从启动的进程的Angular 来看,它就是它。
相反,标准输入是一个输入文件(由描述符标识),程序可以根据需要从其中读取输入。默认情况下,它是控制台,但如图所示,父进程(在本例中是shell)可以重定向它(在本例中,从名为file的文件读取)。
不过,关于Java编程需要注意的一点是,正在运行的程序实际上是Java(JVM)本身。一些命令行是为JVM设计的,其他部分是为用Java编写的程序设计的。Java文档将区分两者。

kuuvgm7e

kuuvgm7e2#

在执行C程序时,可以从命令行向其传递一些值。这些值称为命令行参数,很多时候它们对程序很重要,特别是当你想从外部控制程序而不是将这些值硬编码在代码中时。
使用main()函数参数处理命令行参数,其中argc表示传递的参数数量(主要是整数),argv[]是指向传递给程序的每个参数的指针数组(主要是字符数组/字符串)。下面是一个简单的示例,它检查是否有任何参数从命令行提供并相应地采取行动

niknxzdl

niknxzdl3#

当您的应用程序需要使用即时输入来运行时,就使用命令行输入,例如在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);
        }
    }
}


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

相关问题