在命令提示符和fileNotFoundExceptions中使用args的问题

时间:2016-03-13 19:28:48

标签: java io command-prompt filenotfoundexception

我有一些问题,因为看起来我的问题的基础是我不理解如何从命令提示符正确运行我的java类文件并让它们接受参数。

我有我的项目文件夹' ProjectDNA'在这个目录中是我的commands.txt,我希望我的班级可以作为参数。

ProjectDNA\src\package\dna\sequencer是我要调用的课程。

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

执行它
ProjectDNA\src

当我需要它作为一个arg进行处理的.txt文件在ProjectDNA\commands.txt

时,这只会引起更多的混淆

在完成其他类似问题后hereherehere,并查看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)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

当您使用 java 命令并提供类路径设置(在您的示例中为 -cp )时,您告诉Java您在类路径中所需的包的位置位于。在您的示例中,您说这些包位于当前目录中(。表示当前目录)。然后,您可以运行完全限定的类名(例如,使用main()方法)。此时Java开始运行并加载请求的类,执行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目录应该在类路径上(例如,类文件将在该目录下的包中找到)。