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);