Нечувствительный к регистру доступ к каталогу в Java в Unix
Я работаю над Unix, который использует имена файлов с учетом регистра, и мне нужен способ доступа к ним без учета регистра.
В частности, время от времени программа должна попасть в каталог /images в папке проекта. Но поскольку этот каталог создается пользователем вручную, его иногда можно назвать "Изображения", "ИЗОБРАЖЕНИЯ", "iMaGes...".
Учитывая, что в любой папке проекта гарантированно будет только один каталог изображений, как я могу получить к нему прямой доступ, не получая весь список каталогов и не просматривая его?
4 ответа
Нет другого способа, кроме как прочитать полный список имен каталогов и проверить всех и каждого, соответствует ли он вашему шаблону.
Вы можете скрыть это с помощью FilenameFilter
который фильтрует все имена папок, которые не соответствуют вашему шаблону (например, любую папку, чье имя в нижнем регистре равно images
). Это может быть лучшим подходом, потому что он вернет всех кандидатов (iaw: ./Images
, ./imaGes
, ./IMAGES
если у вас есть творческие пользователи, которые размещают более одной папки с изображениями;))
В Java 7 есть нечто, называемое PathMatcher, которое позволяет использовать регулярные выражения для поиска файла.
Не существует решения, которое бы не включало бы циклический просмотр ни списка записей в каталоге, ни списка возможных перестановок строчных и прописных букв.
Unix чувствителен к регистру и просит /image
когда только /Image
существует не даст вам положительного ответа.
Единственное исключение - когда используемая файловая система не чувствительна к регистру (например, варианты FAT не чувствительны к регистру), но, как правило, применима только к внешним носителям.
Если это папка, созданная пользователем, предоставьте им интерфейс выбора файлов, чтобы выбрать папку. Либо так, либо, когда проект создан, создайте папку с изображениями так, чтобы это было предсказуемо позже.