我正在开发与Netbeans和Maven的应用程序。我的应用程序应该从stdin获取数据。但我无法理解如何测试它。将< data.txt
放入参数列表不起作用。有没有办法在Netbeans中将输入从文件重定向到stdin?
我需要一样:
$ java MyProgram < data.txt
我正在开发与Netbeans和Maven的应用程序。我的应用程序应该从stdin获取数据。但我无法理解如何测试它。将< data.txt
放入参数列表不起作用。有没有办法在Netbeans中将输入从文件重定向到stdin?
我需要一样:
$ java MyProgram < data.txt
这可以通过将您自己的运行目标添加到项目的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如果在保存时编译时关闭了该项目。因此,您需要确保项目属性中的“保存时编译”功能处于关闭状态。
工作,我不知道为什么在Save''编译必须被关闭,以得到这个工作? – 2013-08-08 15:51:50
我假设你有一个像一件事:
public static void main(String[] args) {
...
}
这可以作为一个切入点,以您的应用程序使用,更改输入通道之前通过:
FileInputStream is = new FileInputStream(new File("test.data"));
System.setIn(is);
以上可以一个单元/集成测试中使用。
与@ZeroTau解决方案相比,这样做更方便 – 2013-08-08 15:40:05
但它会改变我害怕的代码的功能 - 即运行结果程序将从'test.data'文件读取输入,而不是标准输入流。 – 2013-08-08 15:41:08
我不知道它是如何在NetBeans中,但在Eclipse中,你可以写一些东西到控制台,它被重定向为STDIN运行的应用程序。我相信在NetBeans中也应该可以工作。因此,只需运行您的应用程序,然后将data.txt
的内容复制/粘贴到控制台,并可能按<ENTER>
。
如果没有帮助,使用远程调试,即从运行命令提示符程序如下:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y MyProgram < data.txt
然后连接到从NetBeans中这一过程。
你是那个了解我的问题的人。但不幸的是这样的外壳STRIG不Netbeans的:( – denys 2012-07-30 11:33:11
旧学校,但这是我所知道的。需要注意的是,mvn命令完成后不会返回到cli,但出于某种目的,这是可以接受的。注意:您需要在项目的根目录
MVN “-Dexec.args = -classpath%CLASSPATH com.mycompany.test” -Dexec.executable = /下载/ jdk1.7 /斌/ java的EXEC-maven-插件:1.2.1:exec </tmp /输入
使用以下文本在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>
您可以随时为此新目标创建快捷方式。
为什么你使用stdin作为输入,而不是简单的访问文件的参数? – khmarbaise 2012-03-13 14:43:16
@khmarbaise写入/读取父/子进程的速度更快,而不是:打开文件/写入文件/关闭文件/运行进程/打开文件/从文件/关闭文件读取。在我的场景中,我不依赖于文件系统的性能,而且我可以在父进程正在写入的情况下从流中读取数据。 – denys 2012-03-14 14:25:05