file.toURI() возвращает неправильное значение?
Я работаю в приложении Java RCP. Я делаю следующие строки кода:
File file = new File(location);
String filePath = file.toURI().toString();
Desktop desktop = Desktop.getDesktop();
desktop.browse((new URL(filePath)).toURI());
где местоположение является строкой.
Когда значение местоположения: http://www.google.com/,
file.toURI()
добавляет "file:/C:/eclipse%203.7.2/eclipse/" к значению и, следовательно, становится файлом:/C:/eclipse%203.7.2/eclipse/http:/www.google.com
Но когда значение равно: C:\Program Files,
file.toURI()
ничего не добавляет и возвращает одно и то же значение правильно.
Есть ли ограничения, связанные с путями, начинающимися с http: // или что-то еще. У кого-нибудь есть идеи по этому поводу?
2 ответа
У нас есть 2 типа расположения файлов: относительный и абсолютный. Когда местоположение что-то вроде C:\User
в MS Windows или /home
в Linux расположение абсолютно и нет необходимости добавлять что-либо в начало! Но когда местоположение http://google.com
программа добавляет местоположение вашей программы в начале.
Я думаю, что вам нужно искать о URI
а также URL
, Вы использовали их неправильно!
java.io.File работает с путями к файлам, а не с URL.
Таким образом, он преобразует предоставленные параметры инициализации в представление, поддерживаемое вашей локальной файловой системой.
"http: //" ничего не значит для вашей локальной файловой системы, это просто имя файла (ну, в общем, неправильное имя файла, но в любом случае).
В первом случае с " http://www.google.com/" он не видит букву диска в указанном значении, поэтому он рассматривается как относительный путь, а текущий рабочий каталог абсолютный путь добавляется в качестве префикса ("user.home") env var если я не ошибаюсь).
Во втором случае вы добавили абсолютный путь "C:\Program Files". Он видит букву диска внутри и нет смысла добавлять что-либо в качестве префикса.