Как запустить внешний исполняемый файл из Java и сохранить вывод в TXT? - PullRequest
0 голосов
/ 02 ноября 2019

Привет, я новичок в Java, и я пытаюсь запустить исполняемый файл (exe) пакета vienna из eclipse java, я хочу, чтобы он получил строку и использовал ее на exe, и я хочу сохранить выходные данные exe в текстовом файле. как я могу это сделать?

    String[] params = new String [2];
    params[0] = "C:\\Program Files (x86)\\ViennaRNA Package\\RNAup.exe";
    params[1] = "GHHI";   
    try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
        out.print(Runtime.getRuntime().exec(params));
    }

tnx

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Вы можете использовать ProcessBuilder.redirectOutput для прямой записи в файл, например.

import java.io.File;

public class Sample {
  private static final String EXE_FOLDER = "C:\\Program Files (x86)\\ViennaRNA Package";
  private static final String EXE_NAME = "RNAup.exe";

  public static void main(String[] args) throws Exception {
    File exeDir = new File(EXE_FOLDER);
    File exeFile = exeDir.toPath().resolve(EXE_NAME).toFile();
    File outFile = new File("out.txt");
    File errFile = new File("err.txt");

    System.out.println("exeDir="+exeDir);
    System.out.println("exeFile="+exeFile);
    System.out.println("outFile="+outFile.getAbsolutePath());
    System.out.println("errFile="+errFile.getAbsolutePath());

    String[] params = { exeFile.getAbsolutePath() , "GHHI" };
    ProcessBuilder proc = new ProcessBuilder(params).directory(exeDir);

    proc.redirectOutput(outFile);
    proc.redirectError(errFile);
    proc.start();
  }
}
0 голосов
/ 02 ноября 2019

Runtime.getRuntim().exec(...); возвращает экземпляр процесса. Процесс имеет метод getOutputStream. Используйте этот метод, чтобы получить поток. Как только вы прочитаете поток из него.

import java.io.*;

public class Main {
    public static void main(String[] args) {
        String[] params = new String[2];
        params[0] = "C:\\Program Files (x86)\\ViennaRNA Package\\RNAup.exe";
params[1] = "GHHI";
        try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
            Process p = Runtime.getRuntime().exec(params);
            final InputStream inputStream = p.getInputStream();
            final BufferedInputStream bis = new BufferedInputStream(inputStream);
            final BufferedReader br = new BufferedReader(new InputStreamReader(bis));
            String line;
            while((line = br.readLine()) != null) {
                out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
...