У меня есть полный путь в файл A.
У меня есть относительный путь в файл B из файла каталог A. Этот путь может и использовать ".." повыситься структура каталогов произвольно сложными способами.
Пример A:
C:\projects\project1\module7\submodule5\fileA
Бакалавр наук в качестве примера:
..\..\module3\submodule9\subsubmodule32\fileB
..\submodule5\fileB
..\..\module7\..\module4\submodule1\fileB
fileB
Как я комбинирую два для получения самого простого полного пути в файл B?
Если я правильно понял вашу проблему, вы можете сделать что-то вроде этого:
File a = new File("/some/abs/path");
File parentFolder = new File(a.getParent());
File b = new File(parentFolder, "../some/relative/path");
String absolute = b.getCanonicalPath(); // may throw IOException
Я знаю, что это не лучшее решение, но нельзя просто объединить подстроку пути fileA от 0 до lastIndexOf ("\")
с путем fileB .
Пример A:
C: \ projects \ project1 \ module7 \ submodule5 \ fileA
Пример Bs:
.. \ .. \ module3 \ submodule9 \ subsubmodule32 \ fileB
C: \ projects \ project1 \ module7 \ submodule5 \ .. \ .. \ module3 \ submodule9 \ subsubmodule32 \ fileB
Если вы не хотите, чтобы там был ..
, тогда это займет больше времени, но я рекомендую пройти путь к fileB
и продолжить брать подстроку от 0 до первого индекса \
. Затем проверьте подстроку. Если это ..
, то удалите оттуда подстроку и удалите подстроку из пути fileA
от lastIndexOf (\)
до длины. Потом повторить. Таким образом вы удалите ненужные папки и .. s
.
Итак:
Пример A:
C: \ projects \ project1 \ module7 \ submodule5 \ fileA
Пример Bs:
.. \ .. \ module3 \ submodule9 \ subsubmodule32 \ fileB
-> C: \ projects \ project1 \ module3 \ submodule9 \ subsubmodule32 \ fileB