【问题标题】:Is there a way to redirect input from file to stdin in Netbeans?有没有办法将输入从文件重定向到 Netbeans 中的标准输入?
【发布时间】:2012-03-29 23:21:54
【问题描述】:

我正在使用 Netbeans 和 Maven 开发应用程序。我的应用程序应该从标准输入获取数据。但我不明白如何测试它。将< data.txt 放入 args 列表不起作用。

我需要的一样:

$ java MyProgram < data.txt 

【问题讨论】:

  • 为什么你使用stdin作为输入而不是简单的访问文件的参数?
  • @khmarbaise 从父进程向子进程写入/读取比:打开文件/写入文件/关闭文件/运行进程/打开文件/从文件读取/关闭文件更快。在我的场景中,我不依赖于文件系统性能,我可以在父进程写入流时从流中读取...

标签: java maven netbeans


【解决方案1】:

我假设你有这样的事情:

public static void main(String[] args) {
...
}

这可以用作您的应用程序的入口点,在此之前您可以通过以下方式更改输入通道:

FileInputStream is = new FileInputStream(new File("test.data"));
System.setIn(is);

以上可以在单元/集成测试中使用。

【讨论】:

  • 与@ZeroTau 解决方案相比,这非常方便
  • 但它会改变我担心的代码的功能 - 即运行时的结果程序将从test.data文件而不是标准输入流中读取输入。
【解决方案2】:

我不确定它在 NetBeans 中的情况,但在 Eclipse 中,您可以向控制台写入一些内容,并将其作为 STDIN 重定向到正在运行的应用程序。我相信在 NetBeans 中也应该如此。因此,只需运行您的应用程序,然后将 data.txt 的内容复制/粘贴到控制台,然后可能按 &lt;ENTER&gt;

如果没有任何帮助,请使用远程调试,即从命令提示符运行您的程序,如下所示:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y MyProgram &lt; data.txt

然后从 NetBeans 连接到此进程。

【讨论】:

  • 你是理解我问题的人。但不幸的是,这样的 shell 字符串在 Netbeans 中不起作用:(
【解决方案3】:

这可以通过将您自己的运行目标添加到项目的 build.xml 文件中来完成。例如:

<target name="run" depends="jar">
  <exec dir="${work.dir}" executable="java" input="${work.dir}/inputfile.txt">
    <arg value="-jar"/>
    <arg file="${dist.jar}"/>
  </exec>
</target>

请注意,如果项目的“保存时编译”功能已关闭,则运行、调试和测试等命令仅使用您的自定义 build.xml。因此,您需要确保在项目的属性中关闭 Compile on Save。

【讨论】:

  • 我想知道为什么必须关闭 Compile on Save 才能使其正常工作?
【解决方案4】:

老派,但这是我所知道的。一个警告是 mvn 命令在完成后不会返回到 cli,但出于某些目的,这是可以接受的。注意你需要在项目根目录下

mvn "-Dexec.args=-classpath %classpath com.mycompany.test" -Dexec.executable=/Downloads/jdk1.7/bin/java exec-maven-plugin:1.2.1:exec

【讨论】:

    【解决方案5】:

    在 Files->build.xml 下添加一个新的目标“run-input”,并带有以下文本。注意:此版本使用 java 运行时的正确位置。此外,它假定您已使用文件 input1 创建了一个名为 inputs 的目录。

    <target name="run-input" depends="jar">
      <exec dir="${work.dir}" executable="${java.home}/bin/java" input="${src.dir}/inputs/input1">
        <arg value="-jar"/>
        <arg file="${dist.jar}"/>
      </exec>
    </target>
    

    您始终可以为这个新目标创建快捷方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      相关资源
      最近更新 更多