Java в Windows: запретите использование косой черты в имени файла в качестве разделителя - PullRequest
4 голосов
/ 31 января 2011

Я должен создать файл на основе предоставленной мне строки. Для этого примера, скажем, имя файла «Мой файл w / stuff.txt». Когда Java создает файл, используя

 File file = new File("My file w/ stuff.txt")

Несмотря на то, что по умолчанию используется разделитель окон '\', предполагается, что косая черта '/' является разделителем файлов. Таким образом, будущий вызов file.getName() вернет " stuff.txt". Это вызывает проблемы для моей программы.

Есть ли способ предотвратить такое поведение?

Ответы [ 4 ]

6 голосов
/ 31 января 2011

Согласно этой странице Википедии , API-интерфейсы Windows трактуют '/' как эквивалентное '\'. Поэтому, даже если вам как-то удастся внедрить символ '/' в компонент имени пути в (например) объект File, есть вероятность, что Windows в какой-то момент будет воспринимать его как разделитель пути.

Итак, ваши лучшие варианты:

  • Пусть Windows обрабатывает '/' как обычно; т.е. пусть он обрабатывает символ как разделитель пути.
  • Как и выше, но с предупреждением для пользователя о '/'.
  • Проверьте наличие символов '/' AND '\' и отклоните оба, сказав, что имя файла (то есть компонент имени пути) не может содержать разделителей имени пути.

(Лучшие из лучших зависят от деталей вашего заявления; например, можете ли вы сообщить о проблемах человеку, который ввел поддельное имя файла.)

Если вы попытаетесь трактовать '/' иначе, чем '\', вы рискуете создать больше проблем, чем решаете; например если ваше приложение должно быть в сценарии. Если вы молча раздеваете одного или обоих персонажей (или превращаете их во что-то другое), существует риск, что вы создадите дополнительные проблемы; например неожиданные коллизии путей.

(Первоначально я предложил использовать конструктор File(URL) для URL-адреса «file:» с символом% -escaped '/'. Но даже если это работает на стороне Java, он не будет работать на стороне Windows. ) * * тысяча двадцать-один

0 голосов
/ 31 января 2011

Ну, как ты мог перестать быть разделителем папок?Это разделитель папок .Если бы вы сами могли решить, что является разделителем папок, а что нет, тогда вся система рухнет.

0 голосов
/ 31 января 2011

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

0 голосов
/ 31 января 2011

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

...