Как отобразить содержимое файла .txt в окне cmd, используя Java? - PullRequest
0 голосов
/ 04 августа 2020

Я работаю над проектом и хочу отобразить содержимое файла .txt в окне CMD. Я написал этот фрагмент кода, чтобы открыть файл demo.txt в cmd, но он не работает. Переменная "path" содержит место, где находится файл demo.txt (как вы можете видеть, очевидно).

public static void main(String[] args){
    try{
        String path = "C:\\Users\\Hp\\Documents\\NetBeansProject\\Project\\build\\classes\\";
        //cmd command to open open the txt file on cmd window
        String command = ("type " + path + "\\demo.txt");
        //executing this command on cmd using java
        Process process = Runtime.getRuntime().exec(command);
        }catch(IOException e){
            e.printStackTrace();
        }

Этот код дает следующий результат:

Вывод на консоль java

Не обращайте внимания на непонятный или ошибочный код, я все еще новичок в программировании Java.

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Исполняемый файл, который отображает окно 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);
    }
}
0 голосов
/ 04 августа 2020

Команда "type" действительна только в CMD.EXE, поэтому CMD.EXE должен быть запущен. К сожалению, CMD.EXE не запускается как новое окно - он работает в фоновом режиме с его потоками ввода / вывода, доступными для возвращенного класса Process.

Итак, вам нужно заставить CMD запустить второй CMD » введите "blah.txt", чтобы увидеть новое окно! Это сработает - хотя я вообще не рекомендую этот подход:

Path file = Path.of(path, "demo.txt");
String[] command = new String[]{"CMD.EXE", "/c", "start", "type", file.toString()};
Runtime.getRuntime().exec(command);
...