Файл: URI и Slashes
Приложение, над которым я работаю, включает в себя доступ к файлам в общих папках сети, и мы используем URI для указания местоположений файлов.
Мое понимание файла: URI заключается в том, что они должны иметь форму file://
+ path. В случае общего сетевого ресурса Windows этот путь выглядит примерно как \\servername\dir\file
, поэтому результирующий URI становится file:////servername/dir/file
.
Кажется, он отлично работает для Java URI class, но API Win32, похоже, хочет URI стиля file://servername/dir/file
, который Java отвергает потому что он "имеет компонент полномочий".
Я правильно понимаю URI сетевых ресурсов? Есть ли другой способ указать путь без Java, жалующийся на авторитет?
Изменить: Мы надеялись, что будем хранить пути как URI, чтобы использовать схему-часть URI для указания других местоположений (например, file: versus other:). Но, как указано, похоже, что 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.