Подтвердить что ты не робот

Преобразовать имя файла пути к реальному имени файла

Как мне преобразовать имя файла в путь к реальному имени файла?

Например, скажем, что каталог "C:\workspace\project\target\classes" находится в вашем пути к классам. Внутри этого каталога находится файл, например info.properties.

Как бы вы определили (во время выполнения) абсолютный путь к файлу info.properties, указав только строку "info.properties"?

Результат будет похож на "C:\workspace\project\target\classes\info.properties".

Почему это полезно? При написании модульных тестов вам может потребоваться доступ к файлам, содержащимся в тестовых ресурсах (src/main/resources), но они работают с сторонней библиотекой или другой системой, для которой требуется истинное имя файла, а не относительная ссылка на класс.

Примечание. Я сам ответил на этот вопрос, так как считаю его полезным трюком, но похоже, что никто никогда не задавал этот вопрос раньше.

4b9b3361

Ответ 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();