java.nio.file.Path для URL? - PullRequest
       22

java.nio.file.Path для URL?

28 голосов
/ 09 января 2012

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

Ответы [ 2 ]

2 голосов
/ 09 января 2012

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

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

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

0 голосов
/ 23 ноября 2017

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

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

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