我正在向我的网络应用程序添加电子邮件发送功能。将从java.util.Properties
文件中读取 SMTP 服务器设置。我不想硬编码这个文件的路径。
我应该把这个文件放在哪里?
我应该如何访问这个文件?
我正在向我的网络应用程序添加电子邮件发送功能。将从java.util.Properties
文件中读取 SMTP 服务器设置。我不想硬编码这个文件的路径。
我应该把这个文件放在哪里?
我应该如何访问这个文件?
一个好的模式是将静态资源(如属性文件)保存在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();
将属性文件保存在类路径位置,如文件夹: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");
如果您想将它与您的代码一起保存,您也可以通过编程方式创建 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 答案!
这是一个解决方案:
我已将EmailSettings.properties
文件放入WebContent\WEB-INF\classes
. 此代码现在有效:
InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream("EmailSettings.properties");
Properties emailConfig = new Properties();
emailConfig.load( inputFile );
.
.
.
如果设置依赖于阶段,您可以通过 vm Enviorment 变量设置文件的路径。
-DmyPropertyFilePath=....