当前位置: 首页 > 面试题库 >

使用System.setOut()重定向Runtime.getRuntime()。exec()输出;

汪辰阳
2023-03-14
问题内容

我有一个程序Test.java:

import java.io.*;

public class Test {
    public static void main(String[] args) throws Exception {
        System.setOut(new PrintStream(new FileOutputStream("test.txt")));
        System.out.println("HelloWorld1");
        Runtime.getRuntime().exec("echo HelloWorld2");
    }
}

应该将HelloWorld1和HelloWorld2打印到文件text.txt中。但是,当我查看文件时,只能看到HelloWorld1。

  1. HelloWorld2去了哪里?它消失在稀薄的空气中了吗?

  2. 可以说我也想将HelloWorld2重定向到test.txt。我不能仅在命令中添加“ >> test.txt”,因为会出现文件已打开错误。那么我该怎么做呢?


问题答案:

Runtime.exec的标准输出不会自动发送到调用方的标准输出。

要做这样的事情-
访问派生进程的标准输出,读取然后将其写出。请注意,使用getInputStream()Process实例的方法,派生流程的输出对父级可用。

public static void main(String[] args) throws Exception {
    System.setOut(new PrintStream(new FileOutputStream("test.txt")));
    System.out.println("HelloWorld1");

     try {
       String line;
       Process p = Runtime.getRuntime().exec( "echo HelloWorld2" );

       BufferedReader in = new BufferedReader(
               new InputStreamReader(p.getInputStream()) );
       while ((line = in.readLine()) != null) {
         System.out.println(line);
       }
       in.close();
     }
     catch (Exception e) {
       // ...
     }
}


 类似资料:
  • 问题内容: 仅当数据库名称包含(新数据库(myid)等)时,我才能读取文件。我给出以下示例代码: 假设我的数据库名称de mo是指我在打印行时得到的数据库名称仅是de。数据库名称带有空白时可以吗? 问题答案: 您熟悉双引号错误吗?(用于或) 你可以试试: 只需确保您不必传递的任何参数都包含双引号( 而不 是以双引号开头) (请参见 错误6511002 ) 任何类似的参数: 将在 内部 (通过实现)

  • 一个 exec < filename 命令重定向了 标准输入 到一个文件。自此所有 标准输入 都来自该文件而不是默认来源(通常是键盘输入)。在使用 sed 和 awk 时候这种方式可以逐行读文件并逐行解析。 样例 20-1. 使用 exec 重定向 标准输入 #!/bin/bash # 使用 'exec' 重定向 标准输入 . exec 6<&0 # 链接文件描述符 #6 到标准

  • 问题内容: 此代码将执行一个外部exe应用程序。 如果我想执行外部Java文件怎么办?可能吗?例如以下命令: 该代码在java和cmd提示符下不起作用。如何解决呢? 问题答案: 首先,您的命令行看起来不正确。执行命令与批处理文件不同,它不会执行一系列命令,而只会执行一个命令。 从外观上看,您正在尝试更改要执行的命令的工作目录。一个更简单的解决方案是使用,它将允许您指定给定命令的起始目录… 例如…

  • 问题内容: 我正在执行一个命令,该命令向我返回文件的修订号;’文档名称’。但是,如果执行命令时遇到问题,则应用程序将挂断。我该怎么做才能避免这种情况?请在下面找到我的代码。 问题答案: 我想问题是您只在读取InputStream而没有在读取ErrorStream。您还必须注意并行读取两个流。可能发生这种情况,当前从输出流中管道传输的数据已填满OS缓冲区,您的exec命令将自动挂起,以使您的阅读器有

  • 问题内容: 在我正在处理的项目中,我需要执行资源文件夹(位于类路径中)中的脚本。我只是在测试最终的脚本功能,因为我在Windows上,所以我需要一种将文件输出到STDIN的方法,因此我创建了一个简单的cat.jar程序来克隆unixs cat命令。 因此,当我执行“ java -jar cat.jar someFile.txt”时,它将输出文件到stdout。我敢肯定,我做的事情有不同的方式。 无

  • 问题内容: 我只想从特定文件夹执行文件。就我而言/ data / data / my-package / files /。所以我试着: 没用 谁能告诉我正确的做法。谢谢 问题答案: 应该可以使用以下命令在特定的工作目录下调用可执行文件: 如下: 也许没有完整的途径 而不是硬编码,该路径也应该起作用,并且比您自己指定路径更安全/更干净,因为不能保证该 路径始终是所有设备的正确路径。 问题在于目录已针