Схема URI не является файлом,

Я получаю исключение: "URI-схема не является файлом"

Я пытаюсь получить имя файла, а затем сохранить этот файл (с другого сервера) на свой компьютер/сервер из сервлета.

У меня есть строка, называемая "url", отсюда вот мой код:

url = Streams.asString(stream); //gets the URL from a form on a webpage
System.out.println("This is the URL: "+url);
URI fileUri = new URI(url);

File fileFromUri = new File(fileUri);                   

onlyFile = fileFromUri.getName(); 
URL fileUrl = new URL(url);
InputStream imageStream = fileUrl.openStream();
String fileLoc2 = getServletContext().getRealPath("pics/"+onlyFile);

File newFolder = new File(getServletContext().getRealPath("pics"));
    if(!newFolder.exists()){
        newFolder.mkdir();
    }
    IOUtils.copy(imageStream, new FileOutputStream("pics/"+onlyFile));
} 

Линия, вызывающая ошибку, следующая:

File fileFromUri = new File(fileUri);                   

Я добавил остальную часть кода, чтобы вы могли видеть, что я пытаюсь сделать.

Ответ 1

URI "схема" - это то, что приходит перед ":", например "http" в "/fooobar.com/...".

В сообщении об ошибке сообщается, что new File(fileUri) работает только в URI файла "file:" (те, которые ссылаются на имя пути в текущей системе), а не на другие схемы, такие как "http".

В принципе, URI "file:" - это еще один способ указать путь к классу File. Это не волшебный способ сказать File использовать http для извлечения файла из Интернета.

Ответ 2

Ваше предположение о создании File из URL здесь неверно.

Вам просто не нужно создавать File из URL-адреса в файл в Интернете, чтобы вы получили имя файла.

Вы можете просто сделать это с помощью синтаксического анализа URL-адреса:

URL fileUri = new URL("http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/ladybug/fish4.jpg");    
int startIndex = fileUri.toString().lastIndexOf('/');
String fileName = fileUri.toString().substring(startIndex + 1);
System.out.println(fileName);