Java 将类路径文件名转换为实际文件名
如何将类路径上的文件名转换为实际文件名 例如,假设目录Java 将类路径文件名转换为实际文件名,java,classpath,filepath,Java,Classpath,Filepath,如何将类路径上的文件名转换为实际文件名 例如,假设目录“C:\workspace\project\target\classes”位于类路径上。该目录中有一个文件,如info.properties 如果只给出字符串“info.properties”,您将如何(在运行时)确定info.properties文件的绝对文件路径 结果类似于“C:\workspace\project\target\classes\info.properties” 这为什么有用?编写单元测试时,您可能希望访问捆绑在测试资源(
“C:\workspace\project\target\classes”
位于类路径上。该目录中有一个文件,如info.properties
如果只给出字符串“info.properties”,您将如何(在运行时)确定info.properties文件的绝对文件路径
结果类似于“C:\workspace\project\target\classes\info.properties”
这为什么有用?编写单元测试时,您可能希望访问捆绑在测试资源(src/main/resources
)中的文件,但使用的是第三方库或其他需要真实文件名而不是相对类路径引用的系统
注意:我自己已经回答了这个问题,因为我觉得这是一个有用的技巧,但看起来以前从来没有人问过这个问题。使用ClassLoader.getResource()和URL.getFile()的组合 Windows注意:在上述示例中,实际结果将为
"/C:/workspace/project/target/classes/info.properties"
如果您需要更类似Windows的路径(即“C:\workspace\…”
),请使用:
如果资源在jar中,这会产生什么结果?@radai下面是jar中文件的结果示例:
file:/C:/tools/some/path/jarfile.jar/内部/path/file.txt
。要使用上面的答案找到这样一个文件,您必须提供一个相对于jar根的路径——即“internal/path/file.txt”
@radai也要检查一下。您在回答中提到了Windows,但我只是在Linux上运行了它,没有问题。这不适用于包含非URL安全字符(如空格)的文件名,因为它们将在getFile
的返回值中进行百分比编码。
"/C:/workspace/project/target/classes/info.properties"
String nativeFilename = new File(file).getPath();