13

如何将类路径上的文件名转换为真实文件名?

例如,假设该目录"C:\workspace\project\target\classes"位于您的类路径中。该目录中有一个文件,例如info.properties.

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

结果将类似于"C:\workspace\project\target\classes\info.properties".

为什么这很有用?在编写单元测试时,您可能希望访问捆绑在测试资源 ( src/main/resources) 中的文件,但正在使用第三方库或其他需要真实文件名而不是相对类路径引用的系统。

注意:我自己回答了这个问题,因为我觉得这是一个有用的技巧,但看起来以前没有人问过这个问题。

4

1 回答 1

18

使用 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();
于 2013-01-04T17:43:11.727 回答