2009-12-10 2 views
13

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

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

Это, похоже, отлично подходит для Java URI class, но API Win32, похоже, хочет получить URI file://servername/dir/file, который Java отвергает, поскольку он имеет «компонент полномочий».

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

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

ответ

14

Кажется, что Java is wrong:

Неправильно: 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 paths in Java:

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

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

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

+0

Благодарим за быстрый ответ. Вторая ссылка была особенно полезной. Хотя для меня имело смысл, что весь путь будет храниться в сегменте «пути» URI, я вижу, что Java делает это несколько непоследовательно, поэтому я буду следить за этим. – Sammy1Am

+0

На самом деле, насколько мне известно, схема URL-адресов файлов даже не требует двойной косой черты, но только с одной косой чертой. В дикой природе оба часто видны. – hippietrail

+0

https://tools.ietf.org/html/rfc3986#section-3 «Когда полномочия отсутствуют, путь не может начинаться с двух символов косой черты» –