Существуют некоторые ограниченные символы (и даже полные имена файлов, в Windows), для имен файлов и имен каталогов. Этот другой вопрос уже покрывает их.
Существует ли способ, в Java, получить этот список запрещенных символов, которые были бы в зависимости от системы (немного как получение символов прерывателя строки)? Или я могу только поместить список сам, проверив на систему?
Править: Больше фона на моей конкретной ситуации, кроме общего вопроса.
Я использую имя по умолчанию, прибывающее из некоторых данных (никакое реальное управление их содержанием), и это имя дано JFileChooser как имя файла по умолчанию для использования (с setSelectedFile()
). Однако этот усекает что-либо до последнего недопустимого символа.
Эти имена по умолчанию иногда заканчиваются датами в "mm/dd/yy" формате, который оставляет только "yy" на имя по умолчанию, потому что "/" запрещаются. По сути, проверка Исключения не является действительно опцией там, потому что сам файл еще даже не создается.
Редактирование еще раз: Хм, это заставляет меня думать, если JFileChooser усекает имя, он, вероятно, имеет доступ к списку таких символов, может быть интересно проверить это далее.
Edit terrace: хорошо, проверка источников от JFileChooser показывает что-то абсолютно простое. Для текстового поля это использует file.getName (). Это на самом деле не проверяет на недопустимые символы, это просто, что это берет "/" в качестве разделителя пути и сохраняет только конец, "фактическое имя файла". Другие запрещенные символы на самом деле проходят.
Когда дело доходит до чтобы иметь дело с «запрещенными» символами, я бы предпочел переборщить и запретить / заменить все «специальные» символы, которые могут вызвать проблемы в любой файловой системе.
Даже если это технически разрешено, иногда эти символы могут вызывать странности.
Например, у нас была проблема, когда файлы PDF записывались (успешно) в сеть SAN, но при передаче через веб-сервер из этого места некоторые символы вызывали проблемы, когда мы встраивали PDF-файл в HTML-страница, отображаемая в Firefox. Было нормально, если к PDF-файлу был доступ напрямую, и в другом браузере. Какая-то странная ошибка во взаимодействии Firefox и Adobe Reader.
Резюме: «Специальные» символы в именах файлов -> ожидающие появления странные ошибки
В конечном счете, единственный способ быть уверенным - это использовать белый список.
Наличие определенных "запрещенных символов" - лишь одна из многих вещей, которые могут пойти не так при создании файла (другие - права доступа, длина файла и пути) .
На самом деле нет смысла пытаться поймать некоторые из них на раннем этапе, когда есть другие, которые вы не можете уловить, пока не попытаетесь создать файл. Просто правильно обрабатывайте исключения.
Пробовали ли вы использовать File.getCanonicalPath и сравнивать его с исходным именем файла (или тем, что получено из getAbsolutePath )?
Это не даст вам реальных символов , но это может помочь вам определить, является ли это допустимым именем файла в операционной системе, в которой вы работаете.
Взгляните на эту ссылку, чтобы получить некоторую информацию о том, как получить ОС приложение запущено. В основном вам нужно использовать System.getProperty ("os.name") и выполнить equals () или contains (), чтобы узнать операционную систему.
Следует утомить то, что знание ОС не обязательно указывает на используемую файловую систему, например, Mac может читать и записывать в файловую систему FAT32.
источник: http://www.mkyong.com/java/how-to-detect-os-in-java-systemgetpropertyosname/