2013-03-28 113 views
0

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

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

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 

回答

1

看来你的属性文件是相对于Web应用程序根目录。在这种情况下,你可以使用getResource() in ServletContext

+0

但是我没有在任何servlet中使用它。这是简单的java类。 – 2013-03-28 11:27:38

+0

但是该类用于Web应用程序?然后,您可以将ServletContext作为参数传递给方法。或者甚至更好,在需要ResourceBundle的地方使用ServletContext,并将URL传递给方法。这显然要求您更改实用方法的签名。 – NilsH 2013-03-28 12:21:19

+0

我试图让它保持不变。像这样.. public static final ResourceBundle MIME_TYPES = SVNUtil.getMimeTypes(); – 2013-03-28 12:26:59

0

可以发出一个HttpURLConnection的自己(MYDOMAIN/MYAPP /资源/ app.properties),但我会说这是一个丑陋的解决方案

更常见的做法是将你的app.properties重定位到你的类路径中(例如:src/main/resources)。那么如果你使用Spring,你可以使用ClasspathResource。否则,你可以看到这篇文章:How to really read text file from classpath in Java

记住把app.properties有可能意味着你所有的用户能够读取app.properties

+0

其实我已经阅读了一些在classpath上的文件。 ..但是这个文件需要在这里,因为我的js使用这个文件通过ajax调用它..并且它不包含任何敏感数据.. – 2013-03-28 09:25:05

0

我终于得到它加入我的web应用程序/文件夹资源工作到类路径。 将它添加到classpath之后,我们可以简单地这样做 -

ResourceBundle bundle = ResourceBundle.getBundle(bundleName);