2014-02-07 109 views
0
import java.io.*; 

public class chk 
{ 
String className; 
String command,command1,command2; 
public String getMsg(String fileName,String Path) 
{ 
    String dir; 
    command1="cd "+Path; 
    dir=Path.charAt(0)+Path.charAt(1)+""; 
    command2=dir; 
command = "javac " + fileName; 
    String a=executeCommand(command1); 
    a=executeCommand(command2); 
String output = executeCommand(command); 
if(output.compareTo("")==0)    
     output = "Compilation Successfull!!"; 
    return output; 
} 
private String executeCommand(String command) 
{ 
    StringBuffer output = new StringBuffer(); 
    Process p; 
    try 
    { 
     p = Runtime.getRuntime().exec(command); 
     p.waitFor(); 
     BufferedReader reader1 = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
     BufferedReader reader2 = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = "";   
     while ((line = reader1.readLine())!= null) 
     { 
      output.append(line + "\n"); 
     } 
     while ((line = reader2.readLine())!= null) 
     { 
      output.append(line + "\n"); 
     } 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return output.toString(); 
} 
public static void main(String args[])throws IOException 
{ 
     String x; 
    chk ob=new chk(); 
    x=ob.getMsg("MyClass.java","D:\test"); 
    System.out.println("OUtput : "+x); 
} 
} 

错误从java文件执行命令

enter image description here

我试图运行在命令提示符下一堆命令与Java文件的帮助,使我可以在以后编译另一个Java文件命名为“MyClass.java”,它出现在我的电脑的其他驱动器,但我得到以下错误,说明它甚至不能执行我的第一个命令,即“command1 =”cd“+路径;”这条线。请帮忙!

回答

3

cd不是Windows的程序。如果您打开命令提示符窗口,则会运行输入并处理命令的程序cmd.exe。许多命令将导致程序执行,但有些命令由cmd.exe本身解释,包括cd命令。而cd命令将设置一些国家在命令提示符窗口中,将影响同一cmd.exe如何处理未来的命令。正因为如此,不仅可以不运行cd作为一个程序,你也不能运行cmd.exe,并用它来处理cd命令。你可能是,但它不会对你有任何好处,因为cd命令只会影响cmd.exe进程内部发生的事情,然后cmd.exe将终止。

您可能想要查看ProcessBuilder,它有一个方法directory来设置进程的工作目录。 (我对这个班不是很熟悉,所以我不能给你任何具体的例子,但它确实看起来像你需要的那样)。

编辑:进一步研究之后:使用Runtimeexec方法。该exec方法有一个版本,是以工作目录作为参数:

public Process exec(String command, 
        String[] envp, 
        File dir) 

所以,如果你使用这个与nullenvp(假设你不希望创建一组新的环境变量),并与一个File设置为指向工作目录,我想这会给你你想要的。所以你可以用这种方法做事,而不是使用ProcessBuilder

更多:对于像

java zzzzzz <C:\iptest\input.txt> C:\outtest\name.txt 

当在命令提示窗口键入此命令的命令时,cmd.exe程序解释<>命令重定向的输入和输出,以及利用这样的护理需要的行动。他们不会在由exec()执行的命令中工作,因为他们只会被视为命令行参数。的Runtimeexec方法没有设立重定向输入和输出文件的机制,但ProcessBuilder一样。请参阅javadoc。我没有太多的经验与ProcessBuilder,但它看起来像你需要创建一个ProcessBuilder对象,使用command设置命令和参数(如单独的字符串,而不是作为一个长字符串的空格字符),使用directory设置工作目录,使用redirectInputredirectOutput来设置文件重定向,然后start()

+0

我会给出第三个参数吗? – rick

+0

我有一个路径,即“D:\ test”如何将其转换为文件? – rick

+1

'新文件(“D:\\ test”)'。这是在'File'类的文档中。 – ajb