如何将类路径上的文件名转换为真实文件名?
例如,假设目录"C:\workspace\project\target\classes"
在您的类路径中。在该目录中有一个文件,例如info.properties
。
如果只给出字符串"info.properties"
,您如何确定(在运行时)info.properties文件的绝对文件路径?
结果类似于"C:\workspace\project\target\classes\info.properties"
。
为什么这有用?编写单元测试时,您可能希望访问测试资源(src/main/resources
)中捆绑的文件,但是正在使用第三方库或需要真实文件名的其他系统,而不是相对类路径引用。
注意:我自己已经回答了这个问题,因为我认为这是一个有用的技巧,但看起来之前没有人问过这个问题。
答案 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();