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