java.nio.file.Path для URL-адресов?

Java7 поставляется с реализацией по умолчанию Путь для локальных файлов. Существует ли реализация пути для URL-адресов?

Например, я должен иметь возможность скопировать удаленный ресурс, используя следующий код:

Path remote = Paths.get(new URI("http://www.example.com/foo/bar.html"));
Path local = Paths.get(new URI("/bar.html"));
Files.copy(remote, local);

В настоящее время это вызывает java.nio.file.FileSystemNotFoundException: Provider «http» не установлен . Возможно, я мог бы реализовать это сам, но я бы предпочел не изобретать велосипед.

33
задан Gili 9 January 2012 в 03:09
поделиться

2 ответа

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

URI не являются путями файловой системы, поэтому их нельзя рассматривать как таковые. Это адреса / локаторы ресурсов, которые, когда вы заходите туда с вашим браузером (или другим клиентом, который их обрабатывает), они запускают некоторые действия, определенные сервером, который стоит за ними. Там нет стандарта для того, что делает этот сервер, следовательно, гибкость веб-сервисов. Поэтому, если ваш сервер принимает запросы HTTP таким образом, чтобы облегчить копирование файлов, вам придется свернуть свои собственные и передать данные файла в запрос POST.

Другими словами, (1) не относитесь к URI как к путям файловой системы - нет, (2) найдите библиотеку FTP для копирования файлов и / или (3) если вы действительно хотите чтобы создать веб-сервис, который делает это, абстрагируйте детали копирования файла с помощью запроса POST. Если вы # 3 понимаете, что ваше здание довольно близко к обычаю, и что оно, вероятно, будет работать только на подмножестве сайтов, которые соответствуют вашему конкретному дизайну (то есть на тех, которые вы создаете сами). У меня нет стандартного набора параметров или «копирования файлов» с помощью команды POST, и я знаю, что вы можете использовать это, чтобы заставить это «просто работать» - вам придется сопоставить ваш HTTP-запрос с веб-службой на серверная сторона.

2
ответ дан 27 November 2019 в 19:38
поделиться

Мне пришлось столкнуться с подобной проблемой и я написал небольшой метод, чтобы решить эту проблему, вы можете найти ниже.

Отлично работает для объединения URL-адресов и относительных суффиксов. Будьте осторожны, чтобы не указывать суффикс абсолютный из-за поведения функции разрешения URI.

private URI resolveURI(String root, String suffix) {
    URI uri;
    try {
        uri = new URI(root + "/").resolve(suffix);
    } catch (URISyntaxException e) {
        //log
    }
    return uri;
}
-1
ответ дан 27 November 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: