Java в Windows: запретите использование косой черты в имени файла в качестве разделителя
Я должен создать файл на основе предоставленной мне строки. Для этого примера, скажем, имя файла "Мой файл w / stuff.txt". Когда Java создает файл, используя
File file = new File("My file w/ stuff.txt")
Хотя разделитель окон по умолчанию '\'
, предполагается, что '/'
косая черта - это разделитель файлов. Так что будущий вызов file.getName()
вернется " stuff.txt"
, Это вызывает проблемы для моей программы.
Есть ли способ предотвратить такое поведение?
4 ответа
Согласно этой странице в Википедии, API-интерфейсы Windows трактуют "/" как эквивалент "\". Так что даже если вам как-то удастся внедрить символ '/' в компонент имени пути в (например) File
объект, есть вероятность, что Windows в какой-то момент будет рассматривать его как разделитель пути.
Итак, ваши лучшие варианты:
- Пусть Windows обрабатывает '/' как обычно; т.е. пусть он обрабатывает символ как разделитель пути.
- Как и выше, но с предупреждением для пользователя о "/".
- Проверьте наличие символов '/' AND '\' и отклоните оба, сказав, что имя файла (то есть компонент имени пути) не может содержать разделителей пути.
(Лучшие из лучших зависят от деталей вашего приложения; например, можете ли вы сообщить о проблемах человеку, который ввел поддельное имя файла.)
Если вы попытаетесь трактовать '/' иначе, чем '\', вы рискуете создать больше проблем, чем решаете; например, если ваше приложение должно быть в сценарии. Если вы молча раздеваете одного или обоих персонажей (или превращаете их во что-то другое), существует риск, что вы создадите дополнительные проблемы; например, неожиданные коллизии путей.
(Первоначально я предложил использовать File(URL)
конструктор для URL "file:" с символом%-escaped '/'. Но даже если это работает на стороне Java, это не сработает на стороне Windows.)
Если вам предоставляется строка (из внешнего источника), не похоже, что вы можете запретить этой строке содержать определенные символы. Если у вас есть какой-то графический интерфейс для создания строки, вы всегда можете ограничить ее там. В противном случае, какой бы метод не создавал ваш файл, он должен проверять наличие косой черты и либо возвращать ошибку, либо обрабатывать ее по своему усмотрению.
Поскольку в именах файлов Windows не допускается ни прямая, ни обратная косая черта, их следует удалять из строк, используемых для именования файлов.
Ну, как ты мог перестать быть разделителем папок? Это разделитель папок. Если бы вы могли сами решить, что является разделителем папок, а что нет, тогда вся система рухнет.