Файл: 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.