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

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

例如,假设目录"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(); 
Interesting Posts