Java Desktop API не работает с сетевыми путями?

Возможный дубликат:
Не удается запустить файл в сети с помощью Java Desktop?

Я пытаюсь использовать Desktop API для запуска соответствующего приложения для файла. Так что я использую это:

if (Desktop.isDesktopSupported()) 
        Desktop.getDesktop().open(new File(path));

где "путь" - это строка, указывающая на файл.

Все работает нормально, пока я не попытаюсь запустить jpg, который находится в сетевом расположении (например, \\MyNet\folder\image.jpg"), когда я получаю IOException:

java.io.IOException: не удалось открыть файл:////MyNet/folder/image.jpg

Кто-нибудь знает, есть ли способ это исправить?

4 ответа

Решение

Я считаю, что вам нужно указать местоположение / имя файла в стандартном формате URI - который близок к стандартному формату, за исключением серверов. Посмотрите javadocs для Класса URI для получения дополнительной информации.

На самом высоком уровне ссылка на URI (в дальнейшем просто "URI") в виде строки имеет синтаксис

[Схема:] Схема конкретных частей [#fragment]

И чуть позже:

Иерархический URI подлежит дальнейшему анализу в соответствии с синтаксисом

[Схема:][? Запрос] [// власть] [путь][# фрагмент]

поэтому URI должен выглядеть примерно так:

file://MyNet/folder/image.jpg

где "file://" - это протокол, "MyNet" - это сервер, а "/folder/image.jpg" - это местоположение каталога под общим ресурсом.

Надеюсь, это немного поможет.

file:////MyNet/folder/image.jpg - это не путь к файлу. Это URL.

Все до сих пор предполагали, что файл не найден.

Тем не менее, глядя на Desktop open() функция, IOException бросается

если указанный файл не имеет связанного приложения или не удалось запустить связанное приложение

Сказав это, что произойдет, если вы откроете JPG на своем локальном компьютере? Кроме того, что произойдет, если вы попытаетесь вручную запустить JPG по сети?

Изменить: На самом деле, проблема может быть в том, что программа по умолчанию для открытия файлов jpg не понимает file:// uris. Придерживаться путей UNC может быть лучшим выбором.

    File f = new File("\\\\192.168.0.4\\mybookrw\\save\\command.txt");
    Desktop.getDesktop().open(f);

Работал нормально для меня. Единственное предостережение в том, что вы должны проходить проверку подлинности на основе общего ресурса. Если вы вставите путь в окно выполнения, и он запросит у вас имя пользователя и пароль, то он не будет работать из приложения.

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