-1

我正在向我的网络应用程序添加电子邮件发送功能。将从java.util.Properties文件中读取 SMTP 服务器设置。我不想硬编码这个文件的路径。

我应该把这个文件放在哪里?

我应该如何访问这个文件?

4

5 回答 5

3

一个好的模式是将静态资源(如属性文件)保存在WEB-INF/classes/目录下。

这样它们就可以从浏览器中读取classpath而不能被浏览器访问:

例如,将您的设置文件放在 下WEB-INF/classes/mail-settings.properties,然后使用以下内容读取它:

InputStream is = MyClass.class.getResourceAsStream("mail-settings.properties");
Properties p = new Properties();
p.load(is);
is.close();
于 2012-09-27T08:37:38.610 回答
1

将属性文件保存在类路径位置,如文件夹:WEB-INF/classes/mail.properties 这里属性文件是-mail.properties。要阅读此文件,您可以使用以下代码

import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class EmailPropertyReader {
    private static ResourceBundle myResources;  
    public static String FILENAME = "mail";
    static{
        initialize(FILENAME);
    }
    public static void initialize(String propertyFile) throws MissingResourceException
    {
        try{
            myResources = ResourceBundle.getBundle(FILENAME, Locale.getDefault());
        }catch(Exception ex){
            //Logger
        }
        } 
private static String getParameter(String parmName) 
    {
        String param = null;
        try
        {
            param = myResources.getString(parmName) ;

        }catch(Exception e){            
            param = null;
                        //Logger
        }
        if (param != null)
            return param.trim();
        else
            return param;
    }
}

您只需创建对象并在此处输入代码使用方法getParameter() -> 例如:

mail.properties :
EMAILID=a@a.com

然后

String strEmailid=EmailPropertyReader.getParameter("EMAILID");
于 2012-09-27T08:41:29.913 回答
0

如果您想将它与您的代码一起保存,您也可以通过编程方式创建 Properties 实例。

    Properties mailProperties = new Properties();
    mailProperties.setProperty("mail.transport.protocol", "smtp");
    mailProperties.setProperty("mail.smtp.host", "localhost");
    mailProperties.setProperty("mail.smtp.port", "587");
    mailProperties.setProperty("mail.smtp.auth", "false");

    javax.mail.Session.getInstance(mailProperties);

如果你想把它放在一个属性文件中,你可以将它作为类路径资源加载。看看 java.lang.Class 中的 getResourceAsStream。更新:有关如何执行此操作,请参阅 epochs 答案!

于 2012-09-27T08:38:24.687 回答
0

这是一个解决方案:

我已将EmailSettings.properties文件放入WebContent\WEB-INF\classes. 此代码现在有效:

InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream("EmailSettings.properties");

Properties emailConfig = new Properties();

emailConfig.load( inputFile );
.
.
.
于 2012-09-27T09:22:16.887 回答
-1

如果设置依赖于阶段,您可以通过 vm Enviorment 变量设置文件的路径。

-DmyPropertyFilePath=....

还有一篇关于在Java World上加载属性文件的好文章(即使它有点过时)

于 2012-09-27T08:30:59.917 回答