2014-02-07 106 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