在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)
由于
答案 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帮助我!