Есть ли Java-эквивалент System.IO.Path.Combine()
в C # /. NET? Или какой-нибудь код для этого?
Этот статический метод объединяет одну или несколько строк в путь.
Есть ли Java-эквивалент System.IO.Path.Combine()
в C # /. NET? Или какой-нибудь код для этого?
Этот статический метод объединяет одну или несколько строк в путь.
Ответы:
Вместо того, чтобы хранить все на основе строк, вы должны использовать класс, который предназначен для представления пути к файловой системе.
Если вы используете Java 7 или Java 8, вам следует рассмотреть возможность использования
java.nio.file.Path
;Path.resolve
может использоваться для объединения одного пути с другим или со строкой.Paths
Вспомогательный класс полезен тоже. Например:Если вам нужно обслуживать среды до Java-7, вы можете использовать
java.io.File
это так:Если вы хотите вернуть его как строку позже, вы можете позвонить
getPath()
. Действительно, если вы действительно хотите подражатьPath.Combine
, вы можете просто написать что-то вроде:источник
path2
(игнорируяpath1
), еслиpath2
это абсолютный путь. Версия Java отбросит начальный/
или\
и будет относиться к нему как к относительному пути.File.getCanonicalPath
.File
в C #, если хотите. (Я предполагаю, что вы имеете в виду, что существованиеFile
- это выгода, с которой я бы согласился.)В Java 7 вы должны использовать
resolve
:Хотя класс Path NIO2 может показаться немного избыточным для File с неоправданно другим API, на самом деле он немного элегантнее и надежнее.
Обратите внимание, что
Paths.get()
(как предполагает кто-то другой) не имеет перегрузки, принимающей aPath
, и выполнениеPaths.get(path.toString(), childPath)
НЕ является тем же, что иresolve()
. ИзPaths.get()
документов :Сестринская функция
resolve
является превосходнойrelativize
:источник
Основной ответ заключается в использовании файловых объектов. Однако у Commons IO действительно есть класс FilenameUtils, который может делать такие вещи, такие как метод concat () .
источник
Я знаю, что прошло много времени с момента первоначального ответа Джона, но у меня было такое же требование к ОП.
Чтобы расширить решение Джона, я придумал следующее: один или несколько сегментов пути будут занимать столько сегментов пути, сколько вы сможете на них набросать.
Применение
Код здесь для других с похожей проблемой
источник
независимый от платформы подход (использует File.separator, т.е. будет работать, зависит от операционной системы, в которой выполняется код:
источник
Чтобы улучшить ответ JodaStephen, Apache Commons IO имеет FilenameUtils, который делает это. Пример (в Linux):
Он не зависит от платформы и будет производить любые разделители, которые нужны вашей системе.
источник
Вот решение, которое обрабатывает несколько частей пути и краевые условия:
источник
Если вам не нужно больше, чем строки, вы можете использовать com.google.common.io.Files
получить
источник
Возможно, поздно вечером, но я хотел поделиться своим мнением по этому поводу. Я использую шаблон Builder и разрешаю удобно соединенные
append
вызовы. Его можно легко расширить для поддержки работы сPath
объектами.Пример использования:
В результате
absolute
будет что-то вроде:или, может быть, даже:
источник
Это также работает в Java 8:
источник
Это решение предлагает интерфейс для объединения фрагментов пути из массива String []. Он использует java.io.File.File (String parent, String child) :
Тогда вы можете просто сделать:
Возвращает:
источник