开发者社区> 问答> 正文

java 虚拟机读写其他进程数据的问题

public class WriteToProcess
{
public static void main(String[] args) 
{
PrintStream ps = null;
try
{
//运行java ReadStandard命令,返回运行该命令的子进程
Process p = Runtime.getRuntime().exec("java ReadStandard");
//以p进程的输出流创建PrintStream对象
//这个输出流对本程序是输出流,对p进程则是输入流)
ps = new PrintStream(p.getOutputStream());
//向ReadStandard程序写入内容,这些内容将被ReadStandard读取
ps.println("普通字符串");
ps.println(new WriteToProcess());
}
catch (IOException ex)
{
ex.printStackTrace();
}
finally
{
if (ps != null)
ps.close();
}
}
}
//定义一个ReadStandard类,该类可以接受标准输入,
//并将标准输入写入out.txt文件。
class ReadStandard
{
public static void main(String[] args) throws Exception
{
//使用System.in创建Scanner对象,用于获取标准输入
Scanner sc = new Scanner(System.in);
PrintStream ps = new PrintStream(
    new FileOutputStream("out.txt"));
//增加下面一行将只把回车作为分隔符
sc.useDelimiter("\n");
//判断是否还有下一个输入项
while(sc.hasNext())
{
    //输出输入项
    ps.println("键盘输入的内容是:" + sc.next());
}
ps.close();
}
}

本程序在cmd窗口下正常运,可以生成out.txt,其中的内容为
键盘输入的内容是:普通字符串
键盘输入的内容是:WriteToProcess@1b67f74
然而在Eclipse中运行却无法生成out.txt?

展开
收起
蛮大人123 2016-03-20 14:29:24 2842 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
     public class WriteToProcess {
        public static void main(String[] args) {
            PrintStream ps = null;
            try {
                // 运行java ReadStandard命令,返回运行该命令的子进程
                System.out.println("start");
                Process p = Runtime.getRuntime().exec("java ReadStandard");
                // 以p进程的输出流创建PrintStream对象
                // 这个输出流对本程序是输出流,对p进程则是输入流)
                ps = new PrintStream(p.getOutputStream());
                // 向ReadStandard程序写入内容,这些内容将被ReadStandard读取
                ps.println("普通字符串");
                ps.println(new WriteToProcess());
                InputStream error = p.getErrorStream();
                System.out.println(convertStreamToString(error));
                System.out.println("start");
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                if (ps != null)
                    ps.close();
            }
        }
    
        public static String convertStreamToString(InputStream is) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            String line = null;
            try {
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "/n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            return sb.toString();
    
        }
    
    }
    
    // 定义一个ReadStandard类,该类可以接受标准输入,
    // 并将标准输入写入out.txt文件。
    class ReadStandard {
        public static void main(String[] args) throws Exception {
            System.out.println("ReadStandard.");
            // 使用System.in创建Scanner对象,用于获取标准输入
            Scanner sc = new Scanner(System.in);
            PrintStream ps = new PrintStream(new FileOutputStream("out.txt"));
            // 增加下面一行将只把回车作为分隔符
            sc.useDelimiter("\n");
            // 判断是否还有下一个输入项
            while (sc.hasNext()) {
                // 输出输入项
                ps.println("键盘输入的内容是:" + sc.next());
            }
            ps.close();
        }
    }
    2019-07-17 19:09:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载