Подтвердить что ты не робот

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

Java7 поставляется с реализацией по умолчанию Path для локальных файлов. Есть ли реализация пути для 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" not installed. Я мог бы реализовать это сам, но я бы не стал изобретать колесо.

4b9b3361

Ответ 1

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

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

Говорить это по-другому, (1) не обрабатывать URI, как они являются файловыми путями - они не являются, (2) найти FTP-библиотеку для копирования файлов и/или (3), если вы действительно хотите для создания веб-службы, которая делает это, абстрагируйте детали копирования файлов через запрос POST. Если вы №3 понимаете, что ваше здание довольно близко к обычаю, и что оно, вероятно, будет работать только на подмножестве сайтов, которые следуют вашему конкретному дизайну (т.е. Те, которые вы сами создаете). Нет стандартного набора параметров или "копирования файлов" через команду POST, о которых я знаю, что вы можете использовать это, чтобы "просто работать" - вам придется сопоставлять свой HTTP-запрос с веб-службой на сервер.

Ответ 2

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

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

private URI resolveURI(String root, String suffix) {
    URI uri;
    try {
        uri = new URI(root + "/").resolve(suffix);
    } catch (URISyntaxException e) {
        //log
    }
    return uri;
}