イントロダクション
前回までに以下のような事をやってきました。
ゲームループ=無限ループ内でゲームのように「入力→XXXな処理」を繰り返すことができる形でプログラムを作る形で
ハローワールドや四則演算を行う形で再再度プログラムの学習を行うというものです。
- Java Mid Basic 〜Lv1Javaの基本を理解する(ゲームループ付き)〜
- Java Mid Basic 〜Lv2_Javaの基本(コードの書き方)ゲームループ付き〜
- Java Mid Basic 〜Lv2_1_Javaの基本(四則計算)ゲームループ付き〜
- [Java Mid Basic 〜Lv2_2_Javaの基本(リファクタリング)ゲームループ付き〜]()
- Java Mid Basic 〜Lv2_3_Javaの基本(リファクタリング実践)ゲームループ付き〜
- Java Mid Basic 〜Lv2_4_Javaの基本(Dirコマンドを作る)ゲームループ付き〜
- Java Mid Basic 〜Lv2_5_Javaの基本(コマンド履歴を作る)ゲームループ付き〜
<各項目の概要と目的>
- ハローワールドを行い、コードを書いて動かす:これによりメインメソッドの存在とコンソールへの出力方法を知ります。
- 動かしてみたので、その内容を理解します。
- とりあえずのレベルで内容を理解したので、実際にコードを書いて動かします。自分でコードを考えて実装→起動を行うとプログラミングの面白みも見えてくるかと思います。
- 書いたコードをレベルアップします。今後この「リファクタリング」はどのレベルになってもついてきます。レベルが高ければ高いほど難易度も上がっていきます。
- 理論的なことをやったのであとは実践です。これも「どのように整理してやれば「拡張性、保守性、パフォーマンス」の面で良いものができるか考えるのである意味「永遠のテーマ」です。(笑)
- 今度は、入力した文字によっていろんな処理を実装できるようにプログラムを改造していきます。サンプルとして「Dirコマンド」のようなカレントディレクトリ(現在いるフォルダ)のファイル一覧を取得する処理を実装しました。
- javaに初めからついているクラス「List」を使用してコマンド履歴を出力するプログラムを作成します。ここではjava.utilパッケージについて記載しています、今後はこのパッケージにあるクラスを何個か使用します。
ハローワールド
変数の扱い方
四則演算
クラスについて
プロパティファイル
今回は、今まで行ってきたことを拡張するために使用できる「プロパティファイル」に関して学習したいと思います。
プロパティファイルは何かしらの値をテキストファイルに定義しておき、これをJavaプログラムの実行時に読み込んでから実行する形で使用します。
プロパティファイルの使用例
例えば、勇者と戦士がプログラムの中に登場するとしましょう。このキャラクターのステータス(状態)はプログラムを実行するたびに変化していきます。
途中でプログラムを終了してそれから、再開したい時、終了したときの情報を保存しておきたいでしょう。
我々がよく目にするのは、「ゲームのセーブ機能」です。保存した情報を読み込んでからプログラムを実行するのでちょうどプロパティファイルの使用方法と似ています。実際には各制作会社で独自のロジックを使用しているかもしれません。
具体的に。。。
例えば下のようなプロパティファイルがあったとしましょう。ファイルの中身は「キー=値」のように定義します。
下のものは「hp」がキーで「10」が値です。同様に下の表のようになっています。
キー | 値 |
---|---|
hp | 10 |
mp | 3 |
ATK | 10 |
DIF | 3 |
<プロパティファイル>
hp=10
mp=3
AKT=10
DIF=3
これをプログラムで読み込むときには下のようなコードで取得することができます。
Properties prop = new Properties();
String path = "/path/to/dir/sample.properties";
InputStream s = new FileInputStream(path);
prop.load(s);
// 「hp」の取得
String value = prop.getProperty("hp");
プロパティファイルを使用するのもjava.utilパッケージにあるクラスを使用します。「プロパティファイル」とは拡張子がproperiesのファイルを指します。「*.properties」
このファイルはキーと値がセットになっています。具体的には下のような感じです。
ads="グーグルアドセンス" win="ウィンドウズ" mac="マッキントッシュ"
このようなファイルを作成し、これを読み込んでプログラム中で使用します。
今回の使い方は「コマンドをキーにして値を表示する」というような形でやろうと思います。
OUT: グーグルアドセンス
設計
前提として、前回までのコードに追加修正を加える形で実装します。
- コンストラクタでプロパティファイルを読み込みます。
- プロパティファイルにあるキー(コマンド)を入力した時はプロパティファイルの値を表示
- それ以外のコマンド(キー)は前回までと同じ動き
つまり
プロパティフィルにあるキーが存在すればそれを出力して、それ以外はいままで通りということです。
実装
今回のポイントはプロパティファイルを読み込むところです。
プログラムが動き始めたら即ファイルを読み込んでおきたいので、コンストラクタで読み込むように実装します。
そして、Propertiesクラスはフィールド変数として使用します。
ちなみにファイルまでのパスを指定しますが、ビルドパスを基準にパスを記載するのでちょいと注意が必要です。
resources/test.properties>resources/test.properties
を読み込みたい場合は「ビルドパスがresourcesにつながっていることを確認します。
そしてコードは下のような感じです。
/** コンストラクタ */ public Lv2_6_Properties() { commandList = new ArrayList&l5;String>(); prop = new Properties(); try { // resources/ prop.load(getClass().getResourceAsStream("test.properties")); } catch (IOException e) { e.printStackTrace(); // エラーコード-1をセットしてプログラム終了 System.exit(-1); } }
ポイントの部分はprop.load(getClass().getResourceAsStream("test.properties"));
の部分です、ここではPropertiesクラスのload()
メソッドを使用してInputStreamからプロパティファイルを読み込みます。
getClass().getResourceAsStream("パス")で対象ファイルのInputStreamを取得します。
具体的にはビルドパスにつながっているディレクトリがルート「/」になるので「/test.properties」が対象のパスになりますが、環境によりルートが違う場合があります。
作成したコードはこちらです。
そして、実行結果です。