Java Shell命令未从当前目录运行

时间:2015-06-25 00:29:39

标签: java shell

this question中,它显示当您从Java运行shell命令时,它从当前目录运行。当我从程序运行命令javac Program.java时,它显示错误(来自标准错误流):

javac: file not found: Program.java
Usage: javac <options> <source files>
use -help for a list of possible options

但是,当我从实际终端运行相同的命令时,它可以正常工作并将.class文件保存在默认目录中。这是代码:

Runtime rt = Runtime.getRuntime();
String command = "javac Program.java";
Process proc = rt.exec(command);

BufferedReader stdInput = new BufferedReader(new 
     InputStreamReader(proc.getInputStream()));

BufferedReader stdError = new BufferedReader(new 
     InputStreamReader(proc.getErrorStream()));

// read the output from the command
System.out.println("Here is the standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
    System.out.println(s);
}
proc.waitFor();

当我在实际的终端中键入它时,为什么它可以工作的任何想法,但不是当我从我的程序运行它时?我正在运行Max OS X Mountain Lion(10.6)

由于

3 个答案:

答案 0 :(得分:1)

您的程序可能正在从其他目录运行。您的IDE(例如Eclipse)可能正在从一个位置运行,并且知道访问程序文件的目录结构。

最简单,最快捷的解决方案是为Program.java编写完全限定的文件路径。

替代方法是找出当前目录是什么。那么,也许运行pwd的方式与在程序代码中运行javac Program.java的方式相同?然后,您可以看到您的程序实际运行的目录。一旦你知道,你就可以编写适当的目录结构。

例如,如果pwd显示您实际上是Program.java所在的2个目录,那么您可以将这些目录放在命令中,如下所示:javac ./dir1/dir2/Program.java

要更改Eclipse运行的目录,请参阅此问题Set the execution directory in Eclipse?

答案 1 :(得分:1)

您可以尝试在程序中打印路径,使用新文件(&#34;。&#34;)。getAbsolutePath(),如果您在ide中,路径可能位于项目的根目录中而不是在当前java文件的路径

答案 2 :(得分:1)

我的代码无法正常工作的原因是因为我在Eclipse IDE中运行它,这会弄乱程序运行的目录。为了修复该程序,我将命令更改为javac -d . src/Program.java。如果我将程序导出到.jar文件并在桌面上运行,我的原始命令就可以了。

感谢saka1029帮助我!