Member 14836693 Ответов: 1

Как бы я записал журналы cmd в текстовый файл с помощью кода java


Ниже приведен код, который я использую для этого ..но файл журнала пуст post bat script завершен
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class SampleProgram {
    
    public static boolean isAlive(Process process) {
        try {
            process.exitValue();
            return false;
        }
        catch (IllegalThreadStateException e) {
            return true;
        }
    }
    
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        Process process;
        int value;
        
        try {
    		process = runtime.exec("cmd /c start cmd.exe /K \"cd C:\\FICO\\SironKYC\\system\\web_client\\ && start C:\\FICO\\SironKYC\\system\\web_client\\kycconfig.bat>Yogesh.txt");

          //  process = runtime.exec("cmd");
        }
        catch (IOException exception) {
            exception.printStackTrace();
            return;
        }
        
        try (FileOutputStream fstdc = new FileOutputStream("C:\\FICO\\output.log");
                FileOutputStream ferrc = new FileOutputStream("C:\\FICO\\error.log");
                OutputStream outc = process.getOutputStream();
                InputStream inc = process.getInputStream();
                InputStream errc = process.getErrorStream()) {
            outc.write("dir\r\n".getBytes());
            outc.flush();
            outc.write("exit\r\n".getBytes());
            outc.flush();
            
            while (isAlive(process) == true) {
                
                if (inc.available() == 0 && errc.available() == 0) {
                    try {
                        Thread.sleep(100);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                
                if (inc.available() > 0) {
                    while (inc.available() > 0) {
                        value = inc.read();
                        System.out.print((char) value);
                        fstdc.write((char) value);
                    }
                }
                
                if (errc.available() > 0) {
                    while (errc.available() > 0) {
                        value = errc.read();
                        System.err.print((char) value);
                        ferrc.write((char) value);
                    }
                }
            }
        }
        catch (IOException exception) {
            exception.printStackTrace();
        }
    }
}


Что я уже пробовал:

Пожалуйста, предложите решить эту проблему

Richard MacCutchan

Вы использовали отладчик для проверки того, что операторы write действительно выполняются?

1 Ответов

Рейтинг:
0

phil.o

Я думаю, что вам не хватает некоторых двойных двойных кавычек в конце вашей командной строки. Более того, я не уверен насчет двойной цепочки cmd / start, возможно, вы слишком много думаете обо всем этом.
Попробуй

process = runtime.exec("cmd.exe /C \"cd C:\\FICO\\SironKYC\\system\\web_client\\ && kycconfig.bat > Yogesh.txt\"");
вместо.