Java程序如何知道如何访问该文件?

Java程序如何知道如何访问该文件?,java,command-line,arguments,stdin,Java,Command Line,Arguments,Stdin,我一直在读这本《算法》第四版。它的代码示例从命令行获取输入 String[] a = StdIn.readAllStrings(); 并对它们进行分类。中给出了StdIn.java的源代码。堆排序的源在中,但实际上不相关。 主要功能如下所示: public static void main(String[] args) { String[] a = StdIn.readAllStrings(); Heap.sort(a); show(a); } 没有对args的显式引

我一直在读这本《算法》第四版。它的代码示例从命令行获取输入

String[] a = StdIn.readAllStrings();
并对它们进行分类。中给出了StdIn.java的源代码。堆排序的源在中,但实际上不相关。 主要功能如下所示:

public static void main(String[] args) {
    String[] a = StdIn.readAllStrings();
    Heap.sort(a);
    show(a);
}
没有对args的显式引用。但是,当我在命令行中将文本文件作为参数传入时,它的工作方式与公布的一样:

   % more tiny.txt
   S O R T E X A M P L E
   % java Heap < tiny.txt
   A E E L M O P R S T X     
%more tiny.txt
S O R T E X A M P L E
%java堆
有人能告诉我,在没有引用的情况下,程序是如何读取输入的吗。提前感谢


编辑:更改了stdinjava的链接。我的坏。

在命令行中,将文件作为
传递给应用程序意味着
whater
文件的内容将成为应用程序的输入。这意味着
tiny.txt
(在您的特定情况下)的内容将成为应用程序的用户输入。

在命令行中,将文件作为
传递给应用程序意味着
whater
文件的内容将成为应用程序的输入。这意味着
tiny.txt
(在您的特定情况下)的内容将成为应用程序的用户输入。

在命令行中,将文件作为
传递给应用程序意味着
whater
文件的内容将成为应用程序的输入。这意味着
tiny.txt
(在您的特定情况下)的内容将成为应用程序的用户输入。

在命令行中,将文件作为
传递给应用程序意味着
whater
文件的内容将成为应用程序的输入。这意味着
tiny.txt
(在您的特定情况下)的内容将成为应用程序的用户输入的t̶e̶d̶i̶o̶u̶s。

查看您提供的
类中
的默认构造函数,我假设
StdIn
只是一个默认初始化的实例。通过这个构造函数,它从stdin读取数据。通过将stdin重定向为来自文件(查看您提供的
类中
的默认构造函数,我假设
stdin
只是一个默认初始化的实例。通过此构造函数,它从stdin读取。通过将stdin重定向为来自文件(查看您提供的
类中的
的默认构造函数,我假设
StdIn
只是一个默认初始化的实例。通过此构造函数,它从StdIn读取。通过将StdIn重定向为文件(查看您提供的
类中
的默认构造函数,我假设
StdIn
只是一个默认初始化的实例。通过此构造函数,它从StdIn读取。通过将StdIn重定向为文件(您犯了一个相当错误:

“中给出了StdIn.java的源代码。”

实际上,StdIn.java的源代码是。你看错了类

“但是,当我在命令行中以参数形式传入文本文件时,它的工作方式与公布的一样”

实际上,您并没有将文本文件作为参数传递。真的

执行此操作时:

% java Heap < tiny.txt
%java堆
shell正在打开文件,并将打开的文件描述符传递给Java。Java将此文件描述符包装为
Java.io.InputStream
对象,并通过
Java.lang.System.in
变量使其可供应用程序使用。这就是
StdIn.readAllStrings()
实际读取的内容


实际上,您的
Heap
程序没有命令行参数。如果在
main
方法中打印
args.length
,您将看到它是零。

您的错误是:

“中给出了StdIn.java的源代码。”

实际上,StdIn.java的源代码是。你看错了类

“但是,当我在命令行中以参数形式传入文本文件时,它的工作方式与公布的一样”

实际上,您并没有将文本文件作为参数传递。真的

执行此操作时:

% java Heap < tiny.txt
%java堆
shell正在打开文件,并将打开的文件描述符传递给Java。Java将此文件描述符包装为
Java.io.InputStream
对象,并通过
Java.lang.System.in
变量使其可供应用程序使用。这就是
StdIn.readAllStrings()
实际读取的内容


实际上,您的
Heap
程序没有命令行参数。如果在
main
方法中打印
args.length
,您将看到它是零。

您的错误是:

“中给出了StdIn.java的源代码。”

实际上,StdIn.java的源代码是。你看错了类

“但是,当我在命令行中以参数形式传入文本文件时,它的工作方式与公布的一样”

实际上,您并没有将文本文件作为参数传递。真的

执行此操作时:

% java Heap < tiny.txt
%java堆
shell正在打开文件,并将打开的文件描述符传递给Java。Java将此文件描述符包装为
Java.io.InputStream
对象,并通过
Java.lang.System.in
变量使其可供应用程序使用。这就是
StdIn.readAllStrings()
实际读取的内容


实际上,您的
Heap
程序没有命令行参数。如果在
main
方法中打印
args.length
,您将看到它是零。

您的错误是:

“中给出了StdIn.java的源代码。”

阿克图