我使用以下代码加载属性:
c:\tomcat8\webapps\example\WEB-INF\classes\file.properties.
我想知道加载文件的绝对路径。例如,如果我在tomcat的webapps文件夹中的Web应用程序中执行此代码,我想获取:
using System.Linq;
我怎么知道这条路?
答案 0 :(得分:0)
我已经解决了'我对这篇文章'Getting current working directory'的问题。对于我的问题,我只需要这个,一旦我知道工作目录,我就可以找到绝对路径
public class Test {
public static void main(String... args) throws Exception {
URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getFile());
}}
我认为也许这个解决方案并不能涵盖所有情况,但这对我来说已经足够了。
答案 1 :(得分:0)
您无法从ResourceBundle
获取物理位置,但如果您知道用于加载它的路径,那么您可以找到的物理位置。像这样:
String resourceToLoad = "file";
URL url = this.getClassLoader().getResource(resourceToLoad);
ResourceBoundle bundle = ResourceBundle.getBundle(resourceToLoad);
url
将拥有资源的物理位置 - 至少在大多数情况下都是如此。
请记住,ResourceBundle
也可以由Java类支持,而不是像属性文件那样。 ClassLoader.getResource
并不了解ResourceBundle
和Java类之间的映射。如果您希望能够支持这些,那么您必须实现与ResourceBundle
所做的类似的算法,以便搜索与其匹配的类。