Как получить запрещенные символы для имен файлов в Java?

Существуют некоторые ограниченные символы (и даже полные имена файлов, в Windows), для имен файлов и имен каталогов. Этот другой вопрос уже покрывает их.

Существует ли способ, в Java, получить этот список запрещенных символов, которые были бы в зависимости от системы (немного как получение символов прерывателя строки)? Или я могу только поместить список сам, проверив на систему?


Править: Больше фона на моей конкретной ситуации, кроме общего вопроса.

Я использую имя по умолчанию, прибывающее из некоторых данных (никакое реальное управление их содержанием), и это имя дано JFileChooser как имя файла по умолчанию для использования (с setSelectedFile()). Однако этот усекает что-либо до последнего недопустимого символа.

Эти имена по умолчанию иногда заканчиваются датами в "mm/dd/yy" формате, который оставляет только "yy" на имя по умолчанию, потому что "/" запрещаются. По сути, проверка Исключения не является действительно опцией там, потому что сам файл еще даже не создается.

Редактирование еще раз: Хм, это заставляет меня думать, если JFileChooser усекает имя, он, вероятно, имеет доступ к списку таких символов, может быть интересно проверить это далее.

Edit terrace: хорошо, проверка источников от JFileChooser показывает что-то абсолютно простое. Для текстового поля это использует file.getName (). Это на самом деле не проверяет на недопустимые символы, это просто, что это берет "/" в качестве разделителя пути и сохраняет только конец, "фактическое имя файла". Другие запрещенные символы на самом деле проходят.

5
задан Community 23 May 2017 в 12:33
поделиться

4 ответа

Когда дело доходит до чтобы иметь дело с «запрещенными» символами, я бы предпочел переборщить и запретить / заменить все «специальные» символы, которые могут вызвать проблемы в любой файловой системе.

Даже если это технически разрешено, иногда эти символы могут вызывать странности.

Например, у нас была проблема, когда файлы PDF записывались (успешно) в сеть SAN, но при передаче через веб-сервер из этого места некоторые символы вызывали проблемы, когда мы встраивали PDF-файл в HTML-страница, отображаемая в Firefox. Было нормально, если к PDF-файлу был доступ напрямую, и в другом браузере. Какая-то странная ошибка во взаимодействии Firefox и Adobe Reader.

Резюме: «Специальные» символы в именах файлов -> ожидающие появления странные ошибки

В конечном счете, единственный способ быть уверенным - это использовать белый список.

4
ответ дан 14 December 2019 в 13:32
поделиться

Наличие определенных "запрещенных символов" - лишь одна из многих вещей, которые могут пойти не так при создании файла (другие - права доступа, длина файла и пути) .

На самом деле нет смысла пытаться поймать некоторые из них на раннем этапе, когда есть другие, которые вы не можете уловить, пока не попытаетесь создать файл. Просто правильно обрабатывайте исключения.

2
ответ дан 14 December 2019 в 13:32
поделиться

Пробовали ли вы использовать File.getCanonicalPath и сравнивать его с исходным именем файла (или тем, что получено из getAbsolutePath )?

Это не даст вам реальных символов , но это может помочь вам определить, является ли это допустимым именем файла в операционной системе, в которой вы работаете.

2
ответ дан 14 December 2019 в 13:32
поделиться

Взгляните на эту ссылку, чтобы получить некоторую информацию о том, как получить ОС приложение запущено. В основном вам нужно использовать System.getProperty ("os.name") и выполнить equals () или contains (), чтобы узнать операционную систему.

Следует утомить то, что знание ОС не обязательно указывает на используемую файловую систему, например, Mac может читать и записывать в файловую систему FAT32.

источник: http://www.mkyong.com/java/how-to-detect-os-in-java-systemgetpropertyosname/

-2
ответ дан 14 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

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