BLOGTIMES
2020/08/23

Ant で起動したプログラムに標準入力から文字列を与える

  java 
このエントリーをはてなブックマークに追加

Ant の Java Task*1 でプログラムを起動させたときに、起動されたプログラムの標準入力に対して入力を与える方法を調べてみました。

結論から述べると、標準入力に渡したい内容のテキストファイルをあらかじめ用意しておき、<java classname="(クラス名)" input="(ファイル名)"> という感じで、input 属性にそのテキストファイルを渡してやると、その内容をプログラムに渡すことができます。

今回は ./input/ というディレクトリ以下に txt ファイルを作ることにより、それらを1つずつ渡して繰り返しプログラムを実行するための build.xml を作ってみました。for や if を使うために ANT Contrib を使っています。ant なんてもう過去の遺産みたいな感じですが、ちょっとしたことがやりたいときには maven とかよりも融通が利きやすいので便利なんですよね。

build.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project name="hoge" default="run"> <property name="mainclass" value="AppMain" /> <property name="srcdir" value="./src" /> <property name="destdir" value="./bin" /> <taskdef resource="net/sf/antcontrib/antlib.xml"> <classpath> <pathelement location="/path/to/ant-contrib-1.0b3.jar" /> </classpath> </taskdef> <path id="inputs"> <fileset dir="./input" includes="*.txt"/> </path> <path id="classpath"> <pathelement location="./bin"/> </path> <target name="init" /> <target name="compile" depends="init"> <delete dir="${destdir}" /> <mkdir dir="${destdir}"/> <javac srcdir="${srcdir}" destdir="${destdir}" includeAntRuntime="false"> <compilerarg value="-Xlint:unchecked" /> </javac> </target> <target name="run" depends="compile"> <var name="done" value="0"/> <for param="file"> <path refid="inputs" /> <sequential> <echo>-----@{file}------</echo> <java classname="${mainclass}" input="@{file}"> <classpath> <path refid="classpath"/> </classpath> </java> <var name="done" value="1"/> </sequential> </for> <if> <equals arg1="${done}" arg2="0" /> <then> <java classname="${mainclass}"> <classpath> <path refid="classpath"/> </classpath> </java> </then> <else /> </if> </target> </project>

実行結果はこんな感じになるはずです。

Buildfile: /path/to/build.xml init: compile: [delete] Deleting directory /path/to/bin [mkdir] Created dir: /path/to/bin [javac] Compiling 7 source files to /path/to/bin run: [echo] -----/path/to/input/1.txt------ [java] 1 [echo] -----/path/to/input/2.txt------ [java] 2 [echo] -----/path/to/input/3.txt------ [java] 3 [echo] -----/path/to/input/4.txt------ [java] 4 BUILD SUCCESSFUL Total time: 753 milliseconds

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/11928
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン