我正在開發與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