Преобразовать имя файла пути к реальному имени файла
Как мне преобразовать имя файла в путь к реальному имени файла?
Например, скажем, что каталог "C:\workspace\project\target\classes"
находится в вашем пути к классам. Внутри этого каталога находится файл, например info.properties
.
Как бы вы определили (во время выполнения) абсолютный путь к файлу info.properties, указав только строку "info.properties"
?
Результат будет похож на "C:\workspace\project\target\classes\info.properties"
.
Почему это полезно? При написании модульных тестов вам может потребоваться доступ к файлам, содержащимся в тестовых ресурсах (src/main/resources
), но они работают с сторонней библиотекой или другой системой, для которой требуется истинное имя файла, а не относительная ссылка на класс.
Примечание. Я сам ответил на этот вопрос, так как считаю его полезным трюком, но похоже, что никто никогда не задавал этот вопрос раньше.
Ответы
Ответ 1
Используйте комбинацию 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();