虽然操作系统中的每个命令行进程都可能使用标准输入、标准输出和标准错误数据流,但我对命令行参数和标准输入感到困惑。也许我的理解是不正确的.但对我来说,它看起来像标准输入是另一种方式来获取数据到程序中,除了命令行.我将不胜感激,如果你帮助我理解的差异.先谢了。
kmpatx3s1#
考虑到Java和其他程序对标准输入的处理,这并没有什么区别(至少在Linux下)。JVM中的标准输入是从父程序的标准输入继承而来的。“命令行”不是同一个概念。考虑Linux中的someProg arg1 arg2 <file:标准输入是命名文件,而不是命令行。所有进程都是通过命令行启动的;在本例中,它包含someProg arg1 arg2。当进程启动时,命令行已经设置好了;从启动的进程的Angular 来看,它就是它。相反,标准输入是一个输入文件(由描述符标识),程序可以根据需要从其中读取输入。默认情况下,它是控制台,但如图所示,父进程(在本例中是shell)可以重定向它(在本例中,从名为file的文件读取)。不过,关于Java编程需要注意的一点是,正在运行的程序实际上是Java(JVM)本身。一些命令行是为JVM设计的,其他部分是为用Java编写的程序设计的。Java文档将区分两者。
someProg arg1 arg2 <file
someProg arg1 arg2
file
kuuvgm7e2#
在执行C程序时,可以从命令行向其传递一些值。这些值称为命令行参数,很多时候它们对程序很重要,特别是当你想从外部控制程序而不是将这些值硬编码在代码中时。使用main()函数参数处理命令行参数,其中argc表示传递的参数数量(主要是整数),argv[]是指向传递给程序的每个参数的指针数组(主要是字符数组/字符串)。下面是一个简单的示例,它检查是否有任何参数从命令行提供并相应地采取行动
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更适合于处理程序的输入。
3条答案
按热度按时间kmpatx3s1#
考虑到Java和其他程序对标准输入的处理,这并没有什么区别(至少在Linux下)。JVM中的标准输入是从父程序的标准输入继承而来的。“命令行”不是同一个概念。
考虑Linux中的
someProg arg1 arg2 <file
:标准输入是命名文件,而不是命令行。所有进程都是通过命令行启动的;在本例中,它包含
someProg arg1 arg2
。当进程启动时,命令行已经设置好了;从启动的进程的Angular 来看,它就是它。相反,标准输入是一个输入文件(由描述符标识),程序可以根据需要从其中读取输入。默认情况下,它是控制台,但如图所示,父进程(在本例中是shell)可以重定向它(在本例中,从名为
file
的文件读取)。不过,关于Java编程需要注意的一点是,正在运行的程序实际上是Java(JVM)本身。一些命令行是为JVM设计的,其他部分是为用Java编写的程序设计的。Java文档将区分两者。
kuuvgm7e2#
在执行C程序时,可以从命令行向其传递一些值。这些值称为命令行参数,很多时候它们对程序很重要,特别是当你想从外部控制程序而不是将这些值硬编码在代码中时。
使用main()函数参数处理命令行参数,其中argc表示传递的参数数量(主要是整数),argv[]是指向传递给程序的每个参数的指针数组(主要是字符数组/字符串)。下面是一个简单的示例,它检查是否有任何参数从命令行提供并相应地采取行动
niknxzdl3#
当您的应用程序需要使用即时输入来运行时,就使用命令行输入,例如在java中,您可以这样写:
字符串
你可以这样运行这个程序:
型
正如你所看到的,整个程序都是围绕一件事构建的,读取一个文件,所以如果我们用文件立即运行程序,而不是运行程序,然后在使程序等待文件之后,从标准输入中给予文件的路径,这样会更好:
型
在其他情况下,我认为Standard Input更适合于处理程序的输入。