- blogs:
- cles::blog
« コロナとオンライン授業 :: 久しぶりの血漿成分献血(通算 25 回目) »
2020/08/23

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

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でログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
« コロナとオンライン授業 :: 久しぶりの血漿成分献血(通算 25 回目) »
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(111992)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110622)
3 . 年次の人間ドックへ(110253)
4 . 2023 年分の確定申告完了!(1つめ)(109799)
5 . 三菱鉛筆がラミーを買収(109697)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110622)
3 . 年次の人間ドックへ(110253)
4 . 2023 年分の確定申告完了!(1つめ)(109799)
5 . 三菱鉛筆がラミーを買収(109697)
cles::blogについて
Referrers