0

2 つの問題があります。

  1. ファイルリーダーのパスは実際のパスですが、relative path
  2. ファイルからコンテンツを読み取った後、そのコンテンツを文字列に保存しています。文字列を印刷すると、cn and ci次のコードの実際の値は印刷されません。

    String content = "";
    String cn, ci;
    cn = request.getParameter("carrier_name");
    ci = request.getParameter("carrier_id");
    BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\abcd\\Documents\\NetBeansProjects\\sendmail\\web\\mailformat.html"));
    String str;
    while ((str = in.readLine()) != null) {
        content += str;
    }
    
    in.close();
    out.println(""+content+"");
    

mailformat.html

hello
carrier name :<label >"+cn+"</label>
carrier id <label>"+ci+"</label>
4

3 に答える 3

1

テキストを読むだけで、JVM がそれを理解し、カスタム文字列形式として扱うことを期待することはできません。ファイルから読み取った文字列を調べて、パラメーターで置き換える必要があるトークンを見つける必要があります。

このメソッドは便利かもしれません: String.replace(CharSequence, CharSequence)

相対パス部分の場合: 相対パスを使用してください。それに魔法はありません。

于 2013-11-07T13:47:47.567 に答える
1

パスから File インスタンスをインスタンス化します。相対パスは、現在のディレクトリなど、何かに対して相対的でなければならないことに注意してください。ところで、パスには「\」の代わりに「/」を使用してください。Windows は気にせず、* nix フレンドリーであり、すべてのエスケープを回避できます。

String を連結するのではなく、StringBuilder を使用します。より効率的で柔軟です。

非最終ローカル変数を null に初期化します。それは良い習慣です。

cn と ci で示したコードでは何もしません。コンテンツの「cn」と「ci」を変数の値に置き換えるつもりですか? ある種の検索と置換を行う必要があります。

于 2013-11-07T13:53:10.157 に答える
0

Web アプリケーションへの相対パスを取得するには、 ServletContext#getRealPathを使用できます。

しかし、これはメールメッセージのテンプレートのように見えるので、クラスパスに入れてgetClass().getResourceAsStream(name)を使用して取得することができます

InputStream is = getClass().getResourceAsStream(name);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));

コンテンツに価値を取り入れることに関しては、ペースホルダーを置き換えることができます

<label >"+cn+"</label>

<label >"+ci+"</label>

String#replace(str, replacement)を使用してリクエストから取得した値を使用します。

于 2013-11-07T13:48:11.523 に答える