JAVAのソースは階層的なパッケージ(package)として管理される。パッケージ内のソースはそれに対応したディレクトリ(フォルダ)の構造として置かれる。
とする。javacにオプション -d により出力ディレクトリを指定できる。
javac (package名)/(mainメソッドがあるソースファイル名)
java (package名).(mainメソッドがあるソースファイル名)
とする。フォルダの区切りの代わりにパッケージの階層構造の区切りとしてドットを用いる。
Manifest-Version: 1.0 Main-Class: ca_2dRoadNet.gui_2d_traffic
jar cvfm ca_2dRoadNet.jar manifest.txt ca_2dRoadNet
java -jar ca_2dRoadNet
パラメータ値を色々変えてプログラムを実行したいときには、べつべつの実行可能ファイルをつくるのは面倒である。
パラメータはコマンドライン引数で
java hogehoge 1.1 2.5 xxxx.csv
などのように実行時に引数として渡すようにしてみよう。コマンドライン引数はmainメソッドの引数に書いた文字列の配列に渡される。つぎのようなプログラムを実行して確かめることができる。
public class comlineArg { public static void main(String[] args) { for (int i = 0; i < args.length; i++) System.out.println(i + "番目の引数: " + args[i]); int param_i=0; try { param_i = Integer.parseInt(args[0]); } catch (Exception e) { System.out.println("引数の型があいません: " + e); System.exit(1); } System.out.println(param_i); } }
プログラム例のように、argsは文字列の配列ですから、整数、浮動小数点数などとして用いるには型変換しなければなりません。Integer.parseInt()のようなラッパークラスのメソッドを用います。 たとえば、 http://www.javadrive.jp/start/wrapper_class/index5.html を参照。
ファイル出力のために用意されているクラスはいくつかあるが、Cと同様なフォーマットを指定して出力する PrintWriter
を用いるのが便利だと思う。
import java.io.*; // PrintWriterはjava.io.*に含まれている // 中略 /* file open */ String filename = "xxxxx.csv"; // 出力先のファイル名 File outfile = new File(filename); // ファイルを開く PrintWriter outdata = new PrintWriter(outfile); // 出力先を指定して、PrintWriterインスタンスを生成 outdata.format("# size=%d, p=%f\n", param_size, param_p); // (例)パラメータの出力 while(mcs < max_mcs) { //シミュレーションの繰り返し mcs = simulation.update_system(); outdata.format("%d,%d,%d\n", mcs,num[0],num[1]); // (例)結果の出力 Cのprintfと同様に使える。 } outdata.close();
要は、 PrintWriter
のインスタンスを生成し、それが有するメソッド format
をつかう。 format()
はCの printf()
と同じように使える。