2012-03-13 84 views
12

我正在開發與Netbeans和Maven的應用程序。我的應用程序應該從stdin獲取數據。但我無法理解如何測試它。將< data.txt放入參數列表不起作用。有沒有辦法在Netbeans中將輸入從文件重定向到stdin?

我需要一樣:

$ java MyProgram < data.txt 
+0

爲什麼你使用stdin作爲輸入,而不是簡單的訪問文件的參數? – khmarbaise 2012-03-13 14:43:16

+0

@khmarbaise寫入/讀取父/子進程的速度更快,而不是:打開文件/寫入文件/關閉文件/運行進程/打開文件/從文件/關閉文件讀取。在我的場景中,我不依賴於文件系統的性能,而且我可以在父進程正在寫入的情況下從流中讀取數據。 – denys 2012-03-14 14:25:05

回答

6

這可以通過將您自己的運行目標添加到項目的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如果在保存時編譯時關閉了該項目。因此,您需要確保項目屬性中的「保存時編譯」功能處於關閉狀態。

+0

工作,我不知道爲什麼在Save''編譯必須被關閉,以得到這個工作? – 2013-08-08 15:51:50

10

我假設你有一個像一件事:

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

這可以作爲一個切入點,以您的應用程序使用,更改輸入通道之前通過:

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

以上可以一個單元/集成測試中使用。

+0

與@ZeroTau解決方案相比,這樣做更方便 – 2013-08-08 15:40:05

+0

但它會改變我害怕的代碼的功能 - 即運行結果程序將從'test.data'文件讀取輸入,而不是標準輸入流。 – 2013-08-08 15:41:08

1

我不知道它是如何在NetBeans中,但在Eclipse中,你可以寫一些東西到控制檯,它被重定向爲STDIN運行的應用程序。我相信在NetBeans中也應該可以工作。因此,只需運行您的應用程序,然後將data.txt的內容複製/粘貼到控制檯,並可能按<ENTER>

如果沒有幫助,使用遠程調試,即從運行命令提示符程序如下:

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

然後連接到從NetBeans中這一過程。

+0

你是那個瞭解我的問題的人。但不幸的是這樣的外殼STRIG不Netbeans的:( – denys 2012-07-30 11:33:11

1

舊學校,但這是我所知道的。需要注意的是,mvn命令完成後不會返回到cli,但出於某種目的,這是可以接受的。注意:您需要在項目的根目錄

MVN 「-Dexec.args = -classpath%CLASSPATH com.mycompany.test」 -Dexec.executable = /下載/ jdk1.7 /斌/ java的EXEC-maven-插件:1.2.1:exec </tmp /輸入

0

使用以下文本在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> 

您可以隨時爲此新目標創建快捷方式。

相關問題