Java中的标准输入与命令行

iyzzxitl  于 2024-01-05  发布在  Java
关注(0)|答案(3)|浏览(183)

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

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中,您可以这样写:

  1. // CommandLineArgument.java
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.util.Scanner;
  5. public class CommandLineArgument {
  6. public static void main(String[] args) {
  7. if (args.length != 1) {
  8. System.out.println("Please provide exactly one file name as a command line argument.");
  9. return;
  10. }
  11. String filename = args[0];
  12. try {
  13. File file = new File(filename);
  14. Scanner fileScanner = new Scanner(file);
  15. while (fileScanner.hasNextLine()) {
  16. System.out.println(fileScanner.nextLine());
  17. }
  18. fileScanner.close();
  19. System.out.println("File contents printed successfully!");
  20. } catch (FileNotFoundException e) {
  21. System.out.println("Error: File not found: " + filename);
  22. }
  23. }
  24. }

字符串
你可以这样运行这个程序:

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


正如你所看到的,整个程序都是围绕一件事构建的,读取一个文件,所以如果我们用文件立即运行程序,而不是运行程序,然后在使程序等待文件之后,从标准输入中给予文件的路径,这样会更好:

  1. // StandardInputProgram.java
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.util.Scanner;
  5. public class StandardInputProgram {
  6. public static void main(String[] args) {
  7. Scanner scanner = new Scanner(System.in);
  8. System.out.print("Enter the file name: ");
  9. String filename = scanner.nextLine();
  10. try {
  11. File file = new File(filename);
  12. Scanner fileScanner = new Scanner(file);
  13. while (fileScanner.hasNextLine()) {
  14. System.out.println(fileScanner.nextLine());
  15. }
  16. fileScanner.close();
  17. System.out.println("File contents printed successfully!");
  18. } catch (FileNotFoundException e) {
  19. System.out.println("Error: File not found: " + filename);
  20. }
  21. }
  22. }


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

展开查看全部

相关问题