2014-02-07 3 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); 
} 
} 

오류실행 명령

enter image description here

나중에 내가 다른 자바 파일을 컴파일 할 수 있도록 자바 파일의 도움으로 명령 프롬프트에서 명령의 무리를 실행하려고 내 컴퓨터의 다른 드라이브에있는 "MyClass.java"라는 이름이지만 다음과 같은 오류가 발생합니다. 즉, 첫 번째 명령 인 "command1 ="cd "+ Path; 이 줄. pls 도움!

답변

3

cd는 Windows의 프로그램이 아닙니다. 명령 프롬프트 창을 열면 명령을 입력하고 처리하는 프로그램 cmd.exe이 실행됩니다. 많은 명령을 실행하면 프로그램이 실행되지만 어떤 명령은 cmd.exe에 의해 해석됩니다 (예 : cd 명령). 그리고 cd 명령은 명령 프롬프트 창에서 다음과 같은 명령을 처리하는 방법에 영향을주는 상태를 설정합니다. 이 때문에 cd을 프로그램으로 실행할 수 없을뿐만 아니라 cmd.exe을 실행하지 않고 cd 명령을 처리 할 수 ​​없습니다. 이 될 수 있지만, 아무런 문제가되지 않습니다. cd 명령은 그 내부에서 진행되는 작업에만 영향을 미치기 때문에 cmd.exe 프로세스가 종료됩니다.

ProcessBuilder을보고 싶습니다.이 프로세스의 작업 디렉토리를 설정하는 방법은 directory입니다. (저는이 수업에 익숙하지 않아 구체적인 예를 드릴 수는 없지만 필요한 것처럼 보입니다.)

편집 : 더 자세히 살펴보면 : Runtimeexec 방법을 사용하십시오. exec 방법은 매개 변수로 작업 디렉토리 소요 버전은 : 그래서 당신은 envp에 대한 null 이것을 사용하는 경우

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

을 (당신이 환경 변수의 새로운 세트를 만들고 싶지 않아 가정), 및과 File이 작업 디렉토리를 참조하도록 설정되어 있으면 원하는 것을 제공 할 것입니다. 따라서 ProcessBuilder 대신에 이런 식으로 할 수 있습니다.

더 :

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

당신은 명령 프롬프트 창에서 다음 명령을 입력

같은 명령은 cmd.exe 프로그램은 입력과 출력을 리디렉션 할 <> 명령을 해석하고 처리한다 필요한 행동. exec()으로 실행되는 명령에서는 명령 줄 인수로 처리되기 때문에 작동하지 않습니다. exec 메서드가 Runtime 인 경우 리디렉션 된 입력 및 출력 파일을 설정하는 메커니즘이 없지만 ProcessBuilder은 수행합니다. javadoc을 참조하십시오. ProcessBuilder과 관련하여 많은 경험이 없지만 ProcessBuilder 개체를 만들어야하고 command을 사용하여 명령과 인수를 설정해야합니다 (공백 문자가 포함 된 긴 문자열이 아닌 별도의 문자열로 사용). directory을 사용하여 작업 디렉토리 인 경우 redirectInputredirectOutput을 사용하여 리디렉션 할 파일을 설정 한 다음 start()을 지정하십시오.

+0

제 3의 매개 변수 대신에 무엇을 줄 것입니까? – rick

+0

파일에 파일을 전송하는 방법, 즉 "D : \ test"경로가 있습니까? – rick

+1

'새 파일 ("D : \\ 테스트")'. 이것은'File' 클래스의 문서에 있습니다. – ajb