人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javaについて質問です。まったくわかりません…。
分かる方、ご協力お願いします。

javaファイルの中で使っている変数の値を他のファイル(テキストファイルorプロパティファイル?)
で<%= 変数 %>で読み込む。
さらにそのファイルの内容をjavaファイルに再読み込みする。

詳細はコメントに書きます。

●質問者: Ryo0524
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Java コメント テキスト ファイル プロパティ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kn1967
●1000ポイント ベストアンサー

書き方は複数あるので、下記一例。

import java.lang.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class textReplace {
 public static void main(String[] args) throws IOException {
 //
 // 変換用リスト読み込み(ファイル名は1番目の引数)
 BufferedReader br1 = new BufferedReader(new FileReader(args[0])); // ファイルストリーム準備
 Pattern ps1 = Pattern.compile("\\s*=\\s*"); // テキスト分割パターン生成
 Hashtable ht = new Hashtable(); // 変換リスト格納用連想配列
 String rs; // ファイル読み込み用
 while ((rs = br1.readLine()) != null) {
 String[] as = ps1.split(rs); // 分割
 if (as.length == 2) {
// System.out.print(as[0] + "=>" + as[1] + System.getProperty("line.separator")); // 動作テスト(取り出したデータの確認)
 ht.put((String)as[0], (String)as[1]); // 連想配列へ追加
 }
 }
// System.out.println(ht); // 動作テスト(連想配列の中身確認)
 //
 // 変換対象ファイルの読み込み(ファイル名は2番目の引数)
 BufferedReader br2 = new BufferedReader(new FileReader(args[1])); // ファイルストリーム準備
 Pattern ps2 = Pattern.compile("<%=\\s*(.+)\\s*%>"); // テキスト抽出パターン生成
 String ns; // 置換用文字列一時格納用
 StringBuffer sb = new StringBuffer(); // 置換作業用
 while ((rs = br2.readLine()) != null) {
 Matcher m = ps2.matcher((String)rs + ";"); // 抽出
 while (m.find()) { // 抽出されたものを1つ1つ処理
 if ((ns = (String)ht.get((String)m.group(1))) != null) { // 変換用リストの存在確認
 m.appendReplacement(sb, ns);
 } else {
 // 変換リストに無い場合の処理が必要ならココに書く
 }
 }
 m.appendTail(sb); // 残りの部分を補充
 sb.append(System.getProperty("line.separator")); // 改行コード追加
 }
 //
 // 変換対象ファイルへの書き込み(ファイル名は3番目の引数)
 PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(args[2]))); // 上書きモードで書き出し準備
 pw.println(sb); // ファイル出力
 pw.close(); // ファイル出力終了
 }
}

class呼び出し時の引数は3つにしてあります。(上書きなので、2つで良いのですが、

動作確認のため、読み込みと書き込みをバラバラに指定できるようにしてあります。)

java textReplace iniファイル 読み込み元ファイル 書き込み先ファイル

iniファイルの内容例

naiyo1 = 内容1
naiyo2= 内容2
naiyo3 =内容3

読み込み元ファイルの例

今日は<%=naiyo1%>についてお話します。
<%=naiyo2%>については次回の講座で取り扱います。
まずは前回の<%=naiyo3%>の復習から開始します。

変換されて書き込まれたファイルの例

今日は内容1についてお話します。;
内容2については次回の講座で取り扱います。;
まずは前回の内容3の復習から開始します。;

※ 軽い動作テストしか行ってません。

動作テスト用と書いた部分の//を外して動かしたり、

各コマンドについて調べたりで補完していただければと思います。

※末尾にセミコロンがついたままだったりしてますが、

最終出力段階で置換して削るなどしてください。

◎質問者からの返答

詳しいご回答ありがとうございます。

ファイル名はjavaファイルで直接指定したいのですが可能でしょうか?

また、iniファイルとされているのですが、javaファイルの変数を読み込みたいのですがそれは無理なのでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ