对于一个固定目录下的 *.java 和 *.class, 如何在命令行不进入 它们的目录的情况下 直接编译或运行它们?
首先我觉得bai应该分析下楼主的提问。以下讨论都在duwindows系统下进行,因为如zhi果是Linux系统实际上是没dao有后缀名的概念的(Linux下的后缀只是方便人看,系统是不认的,所以可以随便改的),也就没有楼主说的.java和 .class这种说法了。
那么我们一般的windows系统都会有多个分区(A/B/C/D....盘),在不同的目录下自然可以创建同名的文件,比如每个盘下面都创建一个Test.java,那么如果此时在任意目录下执行javac Test.java命令,很显然系统不可能知道你想要编译的到底是哪一个Test.java文件,所以肯定是不行的。于是windows命令行默认你需要操作的文件在当前目录下。也就是楼主说的进入到文件所在目录中,然后执行javac Test.java命令。
但是要想进入文件所在目录是比较麻烦的,因为cmd打开默认路径在C盘下,而我们的文件一般不会放在C盘下,所以我们一般至少需要两步操作才能将路径修改为我们想要的路径,比如我在H盘的Test文件夹下创建了Test.java文件,现在我想编译它:
完成了上述两步之后才能进行我们真正的操作,挺麻烦的,如果路径很长就更加费劲了。
基于上述理解,我认为楼主的问题应该翻译为怎样更加简单的直接编译.java文件和运行.class文件。
不先进入文件所在目录直接编译也不是不行,但是由于前面阐述的原因(会有同名文件导致歧义的问题),那就只能指定文件所在路径了,如下:
文件名前面加路径的方式可以编译,但是不能运行,因为java命令认为后面跟的东西就是类的名字,也就是认为类的名字是"h:/Test/Test"这个整体了,这自然是不行的。那么是否能直接java Test命令呢,答案还是不行,因为默认只会操作当前目录中的文件,这里也就是C:\Users\DELL路径下的文件,自然不存在Test.class文件,所以运行时还是要进入到目录中。这种方式明显还不如第一种。
重点*****楼主想要的方式******
下面是最方便的一种方式,那就是直接在文件所在位置打开命令行,这样命令行目录位置直接就跟文件所在位置一致,也就不需要在输入进入目录的命令了。如下所示:
回车之后可以看到直接打开了cmd界面,此时直接就在文件所在路径下,这样就可以省略进入目录的步骤了。如下所示:
综上,想要操作文件必须要指定路径,这是不能省略的,原因也说了。所不同的只是指定的方式简单还是复杂而已。