java - 在 Java 中将信息传送到另一个进程的首选方式是什么?

标签 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 中像这样调用这个程序。但是,我想在内存中完成所有操作,因此我正在寻找一种好方法将数据写入不在磁盘上的临时文件中,然后将其输入到训练器中。

最佳答案

将集合字符串写入文件的最简单方法是使用 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")) {

关于java - 在 Java 中将信息传送到另一个进程的首选方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074017/

相关文章:

c - 如何阅读整个单词,而不仅仅是第一个字符?

c - 在目录的每个文件中追加一行

c# - 创建在外部进程中运行的 WPF "control"

python - 处理外部流程

java - 线程中同步代码块的异常

java - Angelika Langer Enum<E extends Enum<E>> 解码

java - 注入(inject)与继承

java - Java Spring如何查询MongoDB?

scala - Scala-迭代目录中文件中的所有行

ubuntu - 作为外部进程启动时,Unix 脚本命令不捕获标准输入