转换类路径文件名到真实的文件名(Convert a classpath filename to a

2019-07-17 20:50发布

我将如何转换classpath中的文件的名称到一个真正的文件名?

例如,假设在目录"C:\workspace\project\target\classes"就在你的类路径中。 在该目录是一个文件,如info.properties

你将如何确定,只给出字符串(在运行时)的绝对文件路径info.properties文件"info.properties"

其结果会是这样的"C:\workspace\project\target\classes\info.properties"

这是为什么有用吗? 当编写单元测试,你可能要访问您的测试资源(捆绑文件src/main/resources ),但需要一个真正的文件名,而不是相对的classpath引用第三方库或其他系统的正常工作。

注:我已经回答了这个问题我自己,因为我觉得这是一个有用的技巧,但它看起来像没有人以往任何时候都问过这个问题。

Answer 1:

使用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();


文章来源: Convert a classpath filename to a real filename