Файл: URI и слэши

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

Мое понимание файла: URI состоит в том, что они должны принимать форму file://+путь. В случае сетевого ресурса Windows этот путь выглядит примерно так: \\servername\dir\fileТаким образом, результирующий URI становится file:////servername/dir/file,

Кажется, это прекрасно работает для класса URI в Java, но Win32 API, похоже, хочет file://servername/dir/file URI стиля, который Java отклоняет, потому что он "имеет компонент полномочий".

Правильно ли я понимаю URI общего сетевого ресурса? Есть ли другой способ указать путь без жалоб Java на полномочия?

Изменить: Мы надеялись, что сможем сохранить пути как URI, чтобы использовать часть схемы URI для указания других мест (например, файл: против другого:). Но, как указано, похоже, что у Java могут быть свои проблемы с URI...

1 ответ

Кажется, что Java не так:

Неправильно: file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf
Правильный: file://applib/products/a-b/abc_9/4148.920a/media/start.swf

На UNC-путях в Java:

Класс URI достаточно хорошо обрабатывает UNC-пути, но имеет некоторые проблемы. В библиотеках классов Java строковое представление пути UNC выглядит следующим образом:

new File("//SERVER/some/path").toURI().toString()
                                                -> "file:////SERVER/some/path

Другими словами, URI сохраняет весь путь UNC в компоненте пути URI и оставляет компонент сервер / полномочия пустым. Пока вы последовательно используете это строковое представление, вы сможете успешно взаимодействовать с java.net.URI.

Другие вопросы по тегам