Java/Liferay 中的文件路径问题
Issue with file path in Java/Liferay
我尝试了多种方法从资源文件夹中加载 属性 文件。
每次,我都会遇到找不到文件的异常。我的代码如下:
Properties prop = new Properties();
FileInputStream inputStream = new FileInputStream("/resource/excelfilepath.properties");
prop.load(inputStream);
String path = prop.getProperty("excelPath");
System.out.println("Excel File Path "+ path);
我的项目结构如下,
文件路径文字需要的结构是什么?
您需要告诉服务器您的根文件夹所在的位置:
与 Tomcat : 在 catalina.properties
将属性 shared.loader
附加到您的属性中。
使用 Jboss : 在您的 conf 文件夹中编辑 jboss-service.xml
<classpath codebase="${jboss.home.url}/server/default/lib//proprietes/rootFolder" archives="*"/>
我建议创建一个 classe 来加载您的属性 :
喜欢:
public static Properties charger(Class<?> pClass, String pFilename) {
Properties aProperties = null;
try {
InputStream aIs = null;
File aFile = new File(pFilename);
if (!aFile.isAbsolute()) {
aIs = pClass.getClassLoader().getResourceAsStream(pFilename);
if (aIs == null) {
return null;
}
} else if (!aFile.exists()) {
return null;
}
if (aIs == null)
aIs = new FileInputStream(aFile);
InputStreamReader reader = new InputStreamReader(aIs, "UTF-8");
aProperties = new Properties();
aProperties.clear();
aProperties.load(reader);
reader.close();
aIs.close();
} catch (FileNotFoundException e) {
LOG.error("Catch FileNotFoundException : ", e);
} catch (IOException e) {
LOG.error("Catch IOException : ", e);
}
return aProperties;
}
然后用你想要的 属性 调用你的新 class :
protected static final Properties property = ChargeurProprietes.charger( .class,"PATH");
property.getProperty(NAME OF YOUR PROPERTY);
我认为您真的不想从网络资源中读取 ....properties
文件。这样,所有访问您服务器的用户都可以看到内容 - 只要您不在 web.xml
.
中明确隐藏它
更常见的做法是将它放在访问 class 旁边的 class 路径中。这样你就可以使用 classloader 访问它并且它不再对网络用户可见:
Properties prop = new Properties();
prop.load(CreateUser.class.getResourceAsStream("excelfilepath.properties"));
但是当您使用 Liferay 时,您也应该使用它的配置。只需将 属性 UserCreationPortlet.excelPath
添加到您的门户 - ext.properties 并使用:
String path = PrefsPropsUtil.getString("UserCreationPortlet.excelPath", defaultPath);
我尝试了多种方法从资源文件夹中加载 属性 文件。
每次,我都会遇到找不到文件的异常。我的代码如下:
Properties prop = new Properties();
FileInputStream inputStream = new FileInputStream("/resource/excelfilepath.properties");
prop.load(inputStream);
String path = prop.getProperty("excelPath");
System.out.println("Excel File Path "+ path);
我的项目结构如下,
文件路径文字需要的结构是什么?
您需要告诉服务器您的根文件夹所在的位置:
与 Tomcat : 在 catalina.properties
将属性 shared.loader
附加到您的属性中。
使用 Jboss : 在您的 conf 文件夹中编辑 jboss-service.xml
<classpath codebase="${jboss.home.url}/server/default/lib//proprietes/rootFolder" archives="*"/>
我建议创建一个 classe 来加载您的属性 :
喜欢:
public static Properties charger(Class<?> pClass, String pFilename) {
Properties aProperties = null;
try {
InputStream aIs = null;
File aFile = new File(pFilename);
if (!aFile.isAbsolute()) {
aIs = pClass.getClassLoader().getResourceAsStream(pFilename);
if (aIs == null) {
return null;
}
} else if (!aFile.exists()) {
return null;
}
if (aIs == null)
aIs = new FileInputStream(aFile);
InputStreamReader reader = new InputStreamReader(aIs, "UTF-8");
aProperties = new Properties();
aProperties.clear();
aProperties.load(reader);
reader.close();
aIs.close();
} catch (FileNotFoundException e) {
LOG.error("Catch FileNotFoundException : ", e);
} catch (IOException e) {
LOG.error("Catch IOException : ", e);
}
return aProperties;
}
然后用你想要的 属性 调用你的新 class :
protected static final Properties property = ChargeurProprietes.charger( .class,"PATH");
property.getProperty(NAME OF YOUR PROPERTY);
我认为您真的不想从网络资源中读取 ....properties
文件。这样,所有访问您服务器的用户都可以看到内容 - 只要您不在 web.xml
.
更常见的做法是将它放在访问 class 旁边的 class 路径中。这样你就可以使用 classloader 访问它并且它不再对网络用户可见:
Properties prop = new Properties();
prop.load(CreateUser.class.getResourceAsStream("excelfilepath.properties"));
但是当您使用 Liferay 时,您也应该使用它的配置。只需将 属性 UserCreationPortlet.excelPath
添加到您的门户 - ext.properties 并使用:
String path = PrefsPropsUtil.getString("UserCreationPortlet.excelPath", defaultPath);