2012-03-13 26 views
12

私はNetbeansとMavenでアプリケーションを開発しています。私のアプリケーションはstdinからデータを取得する必要があります。しかし、私はそれをテストする方法を理解できませんでした。 < data.txtをargsリストに入れても機能しません。ファイルから入力をNetbeansの標準入力にリダイレクトする方法はありますか?

私は同じ必要があります。

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

これは、アプリケーションへのエントリポイントとして使用することができますし、その前に、あなたが入力チャンネルを変更します。私はあなたのようなものを持っていると仮定し

$ java MyProgram < data.txt 
+0

なぜファイルにアクセスするパラメタではなく、入力としてstdinを使用していますか? – khmarbaise

+0

@khmarbaiseファイルのオープン/ファイルへの書き込み/プロセスの実行/ファイルのオープン/ファイル/クローズファイルからの読み込みではなく、親プロセスから子プロセスへの書き込み/読み込みが高速です。私のシナリオでは、ファイルシステムのパフォーマンスに依存せず、親プロセスがそれを書いている間にストリームから読み込むことができます... – denys

答えて

6

これは、プロジェクトのbuild.xmlファイルに独自の実行ターゲットを追加することで実行できます。たとえば、次のように保存時にコンパイル機能は、プロジェクトのためにオフになっている場合にのみ、カスタムの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> 

注意。プロジェクトのプロパティで[保存時にコンパイル]がオフになっていることを確認する必要があります。

+0

なぜ、 'Compile on Save'がこの動作をさせるためにオフになっているのだろうと思いますか? –

10

をvia:

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

上記は単位/統合テストで使用できます。

+0

これは@ZeroTauソリューションに比べてはるかに便利です –

+0

しかし、それは私が恐れているコードの機能を変更します結果プログラムは標準入力ストリームの代わりに 'test.data'ファイルからの入力を読み込みます。 –

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

あなたは私の質問を理解した人です。しかし残念なことに、このようなシェルストライクはNetbeansでは動作しません。( – denys

1

古い学校ですが、それは私が知っていたものです。 1つの注意点は、mvnコマンドが実行されたときにcliに戻らないということですが、いくつかの目的でこれは受け入れられます。プロジェクトルートディレクトリにある必要があります。

mvn "-Dexec.args = -classpath%classpath com.mycompany.test" -Dexec.executable =/Downloads/jdk1.7/bin/java exec-maven-プラグイン:1.2.1:exec </tmp/Input

0

Files-> build.xmlの下に新しいターゲット "run-input"を次のテキストで追加します。注:このバージョンでは、Javaランタイムの正しい場所が使用されます。また、input1という名前のディレクトリを作成したと仮定します。

<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> 

あなたは、常にこの新しいターゲットのショートカットを作成することができます。

関連する問題