Java 如何知道resourceBoundle加载的属性的绝对路径

Java 如何知道resourceBoundle加载的属性的绝对路径,java,tomcat,Java,Tomcat,我正在使用以下代码加载属性: ResourceBoundle boundle = ResourceBundle.getBundle("file") 我想知道加载文件的绝对路径。例如,如果我在tomcat的webapps文件夹中的web应用程序中执行此代码,我希望获得: c:\tomcat8\webapps\example\WEB-INF\classes\file.properties. 我怎么知道这条路?我已经“解决”了我在这篇文章中的问题。对于我的问题,我只需要这个,一旦我知道了工作目录,

我正在使用以下代码加载属性:

ResourceBoundle boundle = ResourceBundle.getBundle("file")
我想知道加载文件的绝对路径。例如,如果我在tomcat的webapps文件夹中的web应用程序中执行此代码,我希望获得:

c:\tomcat8\webapps\example\WEB-INF\classes\file.properties.

我怎么知道这条路?

我已经“解决”了我在这篇文章中的问题。对于我的问题,我只需要这个,一旦我知道了工作目录,我就可以找到绝对路径

public class Test {
public static void main(String... args) throws Exception {
    URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
    System.out.println(location.getFile());
}}

我认为这个解决方案可能没有涵盖所有的情况,但对我来说已经足够了。

您无法从
资源包中获取物理位置,但是如果您知道加载它的路径,那么您可以找到它的物理位置。像这样:

String resourceToLoad = "file";
URL url = this.getClassLoader().getResource(resourceToLoad);
ResourceBoundle bundle = ResourceBundle.getBundle(resourceToLoad);
url
将具有资源的物理位置——至少在大多数情况下是这样


请记住,
ResourceBundle
也可以由Java类支持,而不是像属性文件这样的东西
ClassLoader.getResource
不理解
ResourceBundle
和Java类之间的映射。如果您希望能够支持这些,您必须实现一个类似于
ResourceBundle
的算法,以便搜索与其方案匹配的类。

在上述代码中,文件是什么?是文件类的对象吗?我已将其更改为“文件”。文件是属性的文件名。请按错误的方式执行。webapp中的资源是虚拟的,如果war文件未展开,则可能不会映射到物理文件。