访问java中不在buildpath上的属性文件

访问java中不在buildpath上的属性文件,java,file,properties,buildpath,Java,File,Properties,Buildpath,我创建了一个JavaMaven web应用程序。现在我的问题是,我必须使用资源包或属性类访问属性文件。但此属性文件位于webapp/resources文件夹中,即与我的js和css文件位于同一目录中 我有这个实用方法,但如果需要,我可以编写新的: public static ResourceBundle getBundle(String baseName, String absolutePath) { File file = new File(absolutePath); Res

我创建了一个JavaMaven web应用程序。现在我的问题是,我必须使用资源包或属性类访问属性文件。但此属性文件位于webapp/resources文件夹中,即与我的js和css文件位于同一目录中

我有这个实用方法,但如果需要,我可以编写新的:

public static ResourceBundle getBundle(String baseName, String absolutePath) {
    File file = new File(absolutePath);
    ResourceBundle bundle = null;
    try {
        URL[] urls = { file.toURI().toURL() };
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        bundle = ResourceBundle.getBundle(baseName, Locale.getDefault(), loader);
    } catch (MalformedURLException e) {
    }
    return bundle;
}
我的项目结构:

-project

 -------src

   --------main
           ---------java
           ---------resources
           ---------webapp
                    ----------resources
                              -----------app.properties
                              -----------script.js

您的属性文件似乎是相对于web应用程序根的。在这种情况下,您可以使用

您可以向自己发出HttpUrlConnection(mydomain/myapp/resources/app.properties),但我认为这是一个丑陋的解决方案

更常见的方法是将app.properties重新定位到类路径中(例如:src/main/resources)。然后,如果使用Spring,就可以使用ClasspathResource。或者你可以读这篇文章:


请记住,将app.properties放在那里可能意味着您的所有用户都可以阅读app.properties

通过将我的webapp/resources文件夹添加到classpath,我终于让它工作了。 在将其添加到类路径后,我们可以简单地执行以下操作-

ResourceBundle bundle = ResourceBundle.getBundle(bundleName);

实际上我已经在读一些在类路径上的文件。。。但是这些文件需要放在这里,因为我的js通过ajax调用来使用这个文件。。而且它不包含任何敏感数据。但是我没有在任何servlet中使用它。它是一个简单的java类,但是这个类在web应用程序中使用吗?然后可以将ServletContext作为参数传递给该方法。或者更好,在需要ResourceBundle的地方使用ServletContext,并将URL传递给该方法。很明显,这需要您更改实用程序方法的签名。我试图使其保持不变。这样地。。public static final ResourceBundle MIME_TYPES=SVNUtil.getMimeTypes();这个常量来自另一个文件,而不是servlet:(好吧,在这种情况下,我会说要么把它放在类路径中,要么改变策略。