Java中如何向创建的子进程传入内存中的数据?
Java进程向外部程序传入内存数据的实现方案
一、向Notepad传入内存中文本数据
Windows自带的记事本支持从标准输入读取内容并显示,所以可以通过Java进程的OutputStream(对应子进程的标准输入)直接写入内存中的文本。修改后的代码如下:
import java.io.OutputStream; import java.nio.charset.StandardCharsets; public class NotepadInputDemo { public static void main(String[] args) { // 内存中的目标文本 String textToShow = "这是要在记事本显示的内存文本\n第二行内容"; try { // 启动记事本进程 Process p = Runtime.getRuntime().exec("notepad.exe"); // 用try-with-resources自动管理流,避免资源泄漏 try (OutputStream out = p.getOutputStream()) { // 按UTF-8编码写入文本,避免乱码 out.write(textToShow.getBytes(StandardCharsets.UTF_8)); out.flush(); } // 可选:等待记事本进程结束后再继续执行 int exitCode = p.waitFor(); System.out.println("记事本退出码: " + exitCode); } catch (Exception ex) { ex.printStackTrace(); } } }
关键注意点:
- 必须指定编码(比如
UTF-8),否则记事本可能出现乱码 - 写入后要调用
flush()并关闭流,让记事本知道输入已完成,否则它会一直等待输入
二、向PDF阅读器传入内存中的PDF数据
大部分主流PDF阅读器(如Adobe Acrobat、Foxit Reader)不支持这种方式,原因如下:
- PDF格式需要随机访问文件内容(比如跳转页码、读取元数据),而标准输入是流式的,无法高效实现随机访问
- 这类阅读器的命令行参数仅支持传入文件路径,没有设计从标准输入读取PDF的逻辑
如果必须避免将PDF写入文件,可行的替代方案是:
- 使用Java原生PDF渲染库(如PDFBox、iText)直接在Java程序中渲染并显示PDF,无需启动外部进程
- 极少数小众轻量级PDF查看器可能支持从stdin读取数据,但兼容性极差,不适合生产环境使用
内容的提问来源于stack exchange,提问作者Darian Pudic
相关产品推荐
相关产品推荐

