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

时间:2013-01-04 17:43:12

标签: java classpath filepath

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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();