Файлы, URI и URL, конфликтующие в Java - PullRequest
4 голосов
/ 25 июля 2011

Я получаю странное поведение при попытке выполнить конвертацию между файлами и URL-адресами, особенно когда в имени файла / пути есть пробелы.Есть ли какой-нибудь безопасный способ преобразования между ними?

В моей программе есть функция сохранения файла, при которой фактическая операция «Сохранить» делегируется внешней библиотеке, для которой в качестве параметра требуется URL-адрес.Однако я также хочу, чтобы пользователь мог выбрать, какой файл сохранить.Проблема заключается в том, что при преобразовании между файлом и URL-адресом (с использованием URI) пробелы отображаются как «% 20» и приводят к ошибкам в различных операциях.Рассмотрим следующий код:

//...user has selected file
File userFile = myFileChooser.getSelectedFile();
URL userURL = userFile.toURI().toURL();

System.out.println(userFile.getPath());
System.out.println(userURL);

File myFile = new File(userURL.getFile());

System.out.println(myFile.equals(userFile);

Это вернет false (из-за символов "% 20") и вызовет значительные проблемы в моей программе, поскольку файлы и URL-адреса передаются и часто приходится выполнять операции.выполняется с ними (например, получение родительских / подкаталогов).Есть ли способ сделать обработку файлов / URL безопасными для путей с пробелами?

PS Все работает нормально, если в моих путях нет пробелов (и пути выглядят одинаковыми), но это ограничение пользователя, я не могунавязываю.

Ответы [ 2 ]

5 голосов
/ 25 июля 2011

Проблема в том, что вы используете URL для создания второго файла:

File myFile = new File(userURL.getFile());

Если вы придерживаетесь URI, вам лучше:

URI userURI = userFile.toURI();
URL userURL = userURI.toURL();
...
File myFile = new File(userURI);

или

File myFile = new File( userURL.toURI() );

При тестировании имен файлов с пробелами у меня работали оба способа.

0 голосов
/ 25 июля 2011

Используйте взамен ..

System.out.println(myFile.toURI().toURL().equals(userURL);

Это должно вернуть true.

...