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

У меня есть полный путь в файл A.

У меня есть относительный путь в файл B из файла каталог A. Этот путь может и использовать ".." повыситься структура каталогов произвольно сложными способами.

Пример A:

  • C:\projects\project1\module7\submodule5\fileA

Бакалавр наук в качестве примера:

  • ..\..\module3\submodule9\subsubmodule32\fileB
  • ..\submodule5\fileB
  • ..\..\module7\..\module4\submodule1\fileB
  • fileB

Как я комбинирую два для получения самого простого полного пути в файл B?

35
задан Tom Tresansky 8 July 2010 в 15:11
поделиться

2 ответа

Если я правильно понял вашу проблему, вы можете сделать что-то вроде этого:

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
46
ответ дан 27 November 2019 в 06:52
поделиться

Я знаю, что это не лучшее решение, но нельзя просто объединить подстроку пути 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

0
ответ дан 27 November 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: