Извлечение относительных путей из абсолютных путей - PullRequest
3 голосов
/ 22 марта 2012

Это, казалось бы, простая проблема, но у меня возникают проблемы, когда я делаю это чисто. У меня есть путь к файлу следующим образом:

/ это / есть / AN / абсолютный / путь / к / / положение / / мой / файл

Мне нужно извлечь / из / my / file из указанного выше пути, поскольку это мой относительный путь.

Я думаю об этом следующим образом:

String absolutePath = "/this/is/an/absolute/path/to/the/location/of/my/file";
String[] tokenizedPaths = absolutePath.split("/");
int strLength = tokenizedPaths.length;
String myRelativePathStructure = (new StringBuffer()).append(tokenizedPaths[strLength-3]).append("/").append(tokenizedPaths[strLength-2]).append("/").append(tokenizedPaths[strLength-1]).toString();

Это, вероятно, послужит моим непосредственным потребностям, но может кто-нибудь предложить лучший способ извлечения подпутей из предоставленного пути в java?

Спасибо

Ответы [ 2 ]

11 голосов
/ 22 марта 2012

Используйте URI класс :

URI base = URI.create("/this/is/an/absolute/path/to/the/location");
URI absolute =URI.create("/this/is/an/absolute/path/to/the/location/of/my/file");
URI relative = base.relativize(absolute);

Это приведет к of/my/file.

1 голос
/ 22 марта 2012

При работе с чистыми строковыми операциями и при условии, что вы знаете базовый путь, и при условии, что вам нужны только относительные пути под базовым путем и никогда не добавляется ряд "../":

String basePath = "/this/is/an/absolute/path/to/the/location/";
String absolutePath = "/this/is/an/absolute/path/to/the/location/of/my/file";
if (absolutePath.startsWith(basePath)) {
    relativePath = absolutePath.substring(basePath.length());
}

Конечно, есть лучшие способысделать это с классами, которые знают о логике пути, например, File или URI.:)

...