Исполняемый файл, который отображает окно CMD (как вы ссылаетесь на него в своем вопросе):
C:\Windows\System32\conhost.exe
Используйте класс java.lang.ProcessBuilder
для запуска conhost.exe
ProcessBuilder pb = new ProcessBuilder("conhost.exe");
Process proc = pb.start();
Когда вы запустите этот java код, отобразится окно CMD . Обратите внимание, что вы не можете вводить команды в это окно, потому что его стандартным вводом является ваша программа java, а не клавиатура. Однако вы можете отправлять команды в окно из вашего кода java. Вы просто записываете в выходной поток экземпляра Process
.
Сначала получите выходной поток Process
OutputStream os = proc.getOutputStream();
Затем запишите желаемые команды в выходной поток.
Я использовал команду [Windows] start
, чтобы открыть отдельное окно, с которым вы можете взаимодействовать, и выполнил желаемую команду в этом окне. И, наконец, закрыл окно, открытое через conhost.exe
. В результате окно, открытое командой start
, остается открытым, а программа java завершается.
Вот весь код.
import java.io.IOException;
import java.io.OutputStream;
public class Script {
public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder("conhost.exe");
Process proc = pb.start(); // throws java.io.IOException
OutputStream os = proc.getOutputStream();
os.write("start /D C:\\Users\\Hp\\Documents\\NetBeansProject\\Project\\build\\classes type demo.txt".getBytes()); // throws java.io.IOException
os.write(System.lineSeparator().getBytes()); // throws java.io.IOException
os.write("exit".getBytes()); // throws java.io.IOException
os.write(System.lineSeparator().getBytes()); // throws java.io.IOException
os.flush(); // throws java.io.IOException
int status = proc.waitFor(); // throws java.lang.InterruptedException
System.out.println("Exit status = " + status);
}
}