将类路径文件名转换为实际文件名

2022-09-04 20:09:53

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

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

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

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

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

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


答案 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();

答案 2