存放“java.util.Properties”文件的位置以及如何访问它?

存放“java.util.Properties”文件的位置以及如何访问它?,java,Java,我正在向我的web应用程序添加电子邮件发送功能。SMTP服务器设置将从java.util.Properties文件中读取。我不想硬编码此文件的路径 我应该把这个文件放在哪里 我应该如何访问此文件 如果设置取决于阶段,则可以通过vm环境变量设置文件的路径 -DmyPropertyFilePath= 另外,在上加载属性文件(尽管有点过时)也有一个很好的技巧,遵循的一个好模式是将静态资源(如属性文件)保存在WEB-INF/classes/目录下 这样就可以从类路径中读取它们,而不被浏览器访问: 例如,

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

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


我应该如何访问此文件

如果设置取决于阶段,则可以通过vm环境变量设置文件的路径

-DmyPropertyFilePath=


另外,在上加载属性文件(尽管有点过时)也有一个很好的技巧,遵循的一个好模式是将静态资源(如属性文件)保存在
WEB-INF/classes/
目录下

这样就可以从
类路径中读取它们,而不被浏览器访问:

例如,将您的设置文件放在
WEB-INF/classes/mail settings.properties
下,并使用以下命令读取:

InputStream is = MyClass.class.getResourceAsStream("mail-settings.properties");
Properties p = new Properties();
p.load(is);
is.close();

如果您想将其与代码一起保存,您可以通过编程方式创建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。更新:有关如何做到这一点,请参阅时代答案

将属性文件保存在类路径位置,如文件夹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
然后

以下是一个解决方案:

我已将
EmailSettings.properties
文件放入
WebContent\WEB-INF\classes
中。此代码现在可以工作:

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

Properties emailConfig = new Properties();

emailConfig.load( inputFile );
.
.
.

类似的问题是什么意思?让其他人看看该怎么做。此文件中有密码,危险吗?你能评论一下吗?这取决于你把源代码放在哪里。通常的做法是从源代码管理之外的环境或特定于环境的文件中读取密码。
InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream("EmailSettings.properties");

Properties emailConfig = new Properties();

emailConfig.load( inputFile );
.
.
.