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". Он видит букву диска внутри и нет смысла добавлять что-либо в качестве префикса.

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