我将如何转换classpath中的文件的名称到一个真正的文件名?
例如,假设在目录"C:\workspace\project\target\classes"
就在你的类路径中。 在该目录是一个文件,如info.properties
。
你将如何确定,只给出字符串(在运行时)的绝对文件路径info.properties文件"info.properties"
?
其结果会是这样的"C:\workspace\project\target\classes\info.properties"
。
这是为什么有用吗? 当编写单元测试,你可能要访问您的测试资源(捆绑文件src/main/resources
),但需要一个真正的文件名,而不是相对的classpath引用第三方库或其他系统的正常工作。
注:我已经回答了这个问题我自己,因为我觉得这是一个有用的技巧,但它看起来像没有人以往任何时候都问过这个问题。
使用ClassLoader.getResource方法,()和URL.getFile的组合()
URL url = Thread.currentThread().getContextClassLoader().getResource( resource );
if( url == null ){
throw new RuntimeException( "Cannot find resource on classpath: '" + resource + "'" );
}
String file = url.getFile();
注意:对于Windows:在上面的例子中,实际的结果将是
"/C:/workspace/project/target/classes/info.properties"
如果你需要一个更类似Windows的路径(即"C:\workspace\..."
),使用:
String nativeFilename = new File(file).getPath();