在命令提示符和 fileNotFoundExceptions 中获取参数的问题

Issues with taking args in command prompt and fileNotFoundExceptions

我有几个问题,因为似乎我的问题的基础是我不明白如何从命令提示符正确地 运行 我的 java class 文件并且有他们接受争论。

我有我的项目文件夹“ProjectDNA”,在这个目录中是我的 commands.txt,我希望我的 class 作为参数调用。

ProjectDNA\src\package\dna\sequencer 是 class 我想打电话。

我的问题是我可以在 ProjectDNA\src\package\dna 的命令提示符下编译音序器,但只能从

执行它
ProjectDNA\src

当我需要它作为 arg 处理的 .txt 文件位于 ProjectDNA\commands.txt

时,这只会带来更多混乱

在经历了其他一些类似的问题后 here. here, here,并查看了 oracles 文档,我并不是 100% 了解我应该如何有效地编译,运行,并将 txt 文件作为一个论点。我应该在哪里调用这些命令以及命令提示符中的语法应该如何?当我 运行 来自我的 src 文件时:

java -cp . package.dna.Sequencer commands.txt

我收到了

java.io.FileNotFoundException: commands.txt (The system cannot find the file specified)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.util.Scanner.<init>(Unknown Source)
        at package.dna.Sequencer.process(Sequencer.java:55)
        at package.dna.Sequencer.main(Sequencer.java:113)

如有任何帮助,我们将不胜感激。

你在这里有几个不同的概念。一个是 Java 如何处理 class 路径,另一个是 Java 程序查找文件的默认位置。

当您使用 java 命令并提供 class 路径设置(-cp例如)你告诉 Java 你想要的包在 class 路径上的位置。在您的示例中,您说的是包位于当前目录中(. 表示当前目录)。然后将完全限定的 class 名称提供给 运行(例如使用 main() 方法)。此时Java启动运行ning并加载请求的class,执行main()方法。启动 Java 程序的目录被认为是 当前工作目录.

当您创建 FileInputStream 并为其指定文件名时,它将在当前工作目录中查找该文件。您可以提供文件的完全限定路径而不仅仅是名称。您也可以使用相对路径。例如,在您的情况下,您可以将命令作为:

java -cp。 package.dna.Sequencer ..\commands.txt

..表示当前工作目录之上的父目录。这将导致 FileInputStream 在 src 目录(您启动 Java 程序的位置)上方的 ProjectDNA 目录中查找 commands.txt 文件。

或者您可以从 ProjectDNA 目录启动程序并使用此命令:

java -cp src package.dna.Sequencer commands.txt

在这种情况下,您当前的工作目录将为 ProjectDNA(包含您的 commands.txt 文件以及 src 目录)。 -cp src 告诉 Java src 目录应该在 class 路径上(例如 class 文件将在该目录下的包中找到).