Java 응용 프로그램에서 명령 프롬프트 (cmd.exe)를 열고 명령 프롬프트를 표시하지 않고 명령을 입력/실행하도록하는 방법이 있는지 알고 싶습니다.명령 프롬프트에서 명령을 실행하는 Java 응용 프로그램
누구든지이 작업을 수행 할 수있는 샘플 응용 프로그램이나 코드를 알고 있다면 답변을 얻으실 수 있습니다!
Java 응용 프로그램에서 명령 프롬프트 (cmd.exe)를 열고 명령 프롬프트를 표시하지 않고 명령을 입력/실행하도록하는 방법이 있는지 알고 싶습니다.명령 프롬프트에서 명령을 실행하는 Java 응용 프로그램
누구든지이 작업을 수행 할 수있는 샘플 응용 프로그램이나 코드를 알고 있다면 답변을 얻으실 수 있습니다!
외부 프로그램을 실행하고 통신하는 데 java.lang.ProcessBuilder 및 java.lang.Process 클래스를 사용할 수 있습니다. java.lang.ProcessBuilder 클래스의 인스턴스를 사용하여 외부 프로그램을 실행하고 java.lang.Process의 서브 클래스 인스턴스를 리턴 할 수 있습니다. Process 클래스는, 프로세스로부터의 입력의 실행, 프로세스에의 출력의 실행, 프로세스의 완료를 기다리는 것, 프로세스의 종료 상태의 체크, 및 프로세스의 파기 (종료)를위한 메소드를 제공합니다.
public class ProcessBuildDemo {
public static void main(String [] args) throws IOException {
String[] command = {"CMD", "/C", "dir"};
ProcessBuilder probuilder = new ProcessBuilder(command);
//You can set up your work directory
probuilder.directory(new File("c:\\xyzwsdemo"));
Process process = probuilder.start();
//Read out dir output
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:\n",
Arrays.toString(command));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
//Wait to get exit value
try {
int exitValue = process.waitFor();
System.out.println("\n\nExit Value is " + exitValue);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Runtime.exec 메서드를 사용할 수 있습니다. 예를 들어, "ipconfig를"명령을 실행하고 결과
Process p = Runtime.getRuntime().exec("ipconfig");
BufferedReader reader = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String readline;
while ((readline = reader.readLine()) != null) {
System.out.println(readline);
}
또는 MadProgrammer의 의견에 따라 인쇄됩니다 다음 코드는 자바를 사용하여 프로세스를 실행하는 코드 아래 ProcessBuilder
ProcessBuilder pb = new ProcessBuilder("ipconfig");
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String readline;
while ((readline = reader.readLine()) != null) {
System.out.println(readline);
}
ProcessBuilder를 사용하고 직접 투표하십시오.) – MadProgrammer
고맙습니다. 그것을 시험해 보겠습니다. – Mdlc
@MadProgrammer .. 너무 덧붙였다.하지만 processbuilder가 runtime.exec보다 유리한 점은 무엇입니까? 내 무지 미안하다. – stinepike
사용을 사용할 수 있습니다.
final List<String> commands = new ArrayList<String>();
commands.add("cmd");
commands.add(input2); // second commandline argument
commands.add(input3);// third commandline agrument
ProcessBuilder pb = new ProcessBuilder(commands);
셸 내부에서 실행해야하는지 (cmd.exe) 또는 일반적으로 셸에서 실행할 프로그램을 실행하는지에 따라 달라집니다.
전자는 적절한 Java API를 사용하여 cmd -c <string>
을 호출해야합니다.
후자의 경우 Java API를 사용하여 직접 프로세스를 호출 할 수 있습니다.
중요 : 그러나 Java Process API에는 많은 함정이 있습니다. 은을 사용하고 java.lang.Process/ProcessBuilder
을 사용합니다. 문제를 확인하려면 this link을 참조하십시오.
더 나은 해결 방법은 이러한 모든 문제를 해결하는 Apache Commons Exec library을 사용하는 것입니다.
나는 여기에 동의한다. [여기] (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html)는'Runtime'이나'ProcessBuilder'를 사용하지 않는 이유에 대한 또 하나의 좋은 기사이다. . +1 –
원하는대로 명령 프롬프트를 엽니 다. 가장 도전적으로 명령을 실행하십시오. [ProcessBuilder] (http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html)를 확인하십시오. – MadProgrammer