0

有两个问题:

  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+"");
    

邮件格式.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 友好,并且您避免了所有转义。

使用 StringBuilder 而不是连接字符串。它更高效、更灵活。

将非final局部变量初始化为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 回答