在Java中将信息传递到另一个进程的首选方法是什么?

时间:2015-06-26 13:08:19

标签: java io external-process

我需要将数据传输到另一个进程。数据是一个字符串数组,我将其连接成一个大字符串。外部进程接受文本文件。目前,我正在将字符串写入ByteArrayOutputStream,但有更好的方法吗?

public OutputStream generateBoxFile() throws IOException {
    OutputStream boxStream = new ByteArrayOutputStream();
    for (String boxLine : boxLines) {
        boxLine += "\n";
        boxStream.write(boxLine.getBytes(Charset.forName("UTF-8")));
    }
    return boxStream;
}

编辑:为了进一步澄清,我正在推出一个名为trainer的程序,它接受一个文本文件。所以我会在shell ./trainer textfile中调用这个程序。但是,我想在内存中做所有事情,所以我正在寻找一种将数据写入不在磁盘上的临时文件的好方法,然后将其提供给trainer

2 个答案:

答案 0 :(得分:1)

将集合String写入文件的最简单方法是使用PrintWriter

public static void writeToFile(String filename, Iterable<String> strings) {
    try (PrintWriter pw = new PrintWriter(filename)) {
       for(String str : strings)
            pw.println(str);
    }
}

如果您需要编写UTF-8,可以使用

更改编码
try (PrintWriter pw = new PrintWriter(
                      new OutputStreamWriter(new FileOutputStream(filename), "UTF-8")) {

答案 1 :(得分:1)

您可以轻松地将数据传输到您通过其标准输入流启动的流程。在父进程中,您可以通过Process.getOutputStream()访问子级的标准输入流。

这确实要求您的子进程通过标准输入而不是文件接受数据。您的子进程当前从文件中获取其输入。幸运的是,您在评论中注意到您拥有子进程的代码。