我正在尝试在JSP中使用我的属性文件,但它无法正常工作并抛出错误
Error: myproperties.properties (The system cannot find the file specified)
我在这里试图访问我的属性文件:
<%
try
{
FileInputStream fis = new FileInputStream("myproperties.properties");
Properties p = new Properties();
p.load(fis);
String LogFileName = p.getProperty("NameOfLogFile");
out.println(LogFileName);
}
catch (Exception e)
{// Catch exception if any
out.println(e.getMessage());
}
我尝试了很多方法来访问属性文件。我该如何解决这个问题?
答案 0 :(得分:32)
在包中创建test.properties文件
pname=xyz
psurname=abc
创建jsp文件:
<%@ page language="java" import="java.util.*" %>
<%@ page import = "java.util.ResourceBundle" %>
<% ResourceBundle resource = ResourceBundle.getBundle("test");
String name=resource.getString("pname");
String surname=resource.getString("psurname"); %>
<%=name %>
<%=surname%>
答案 1 :(得分:5)
JSP在servlet容器中运行,因此其当前工作目录由容器定义。通常,它是安装容器的目录或其bin
目录。在任何情况下,它都不是您要存储自定义属性文件的位置。
有两种典型的方法可以满足您的需求。
如果您的文件是应用程序的一部分而您从未在部署时更改它,则第一种方法很好。在这种情况下,请从资源中读取它:
props.load(getClass().getResourceAsStream())
甚至更好
props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream())
如果要在部署环境中更改属性文件,则第二种方法很好。在这种情况下,将它放在容器外的文件系统中。例如Linux上的/opt/mycompany/conf/myproperties.properties
或您喜欢的任何其他位置。现在,您应该在创建FileInputStream
时使用绝对路径。
为了使系统更易于配置,您不应该在代码中编写配置文件的路径。更好的方法是使用系统属性将其传递给应用程序,例如
在运行应用程序服务器时添加-Dmycompany.conf=/opt/mycompany/myprops.properties
之类的参数。
如果要读取文件,请执行以下操作:
new FileInputStream(System.getProperties("mycompany.conf"))
现在,您的系统配置可以由部署人员独立控制。
答案 2 :(得分:0)
尝试将FileInputStream fis = new FileInputStream("myproperties.properties");
更改为FileInputStream fis = new FileInputStream(new File("myproperties.properties"));
此外,请确保已在jsp文件中导入您正在使用的类。 即,
<%@ page import="java.io.FileInputStream" %>
<%@ page import="java.io.File" %>