Схема 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);                   

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

13
задан hippietrail 8 August 2012 в 05:11
поделиться

2 ответа

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

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

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

27
ответ дан 1 December 2019 в 20:28
поделиться

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

Вам просто не нужно создавать файл из 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);
3
ответ дан 1 December 2019 в 20:28
поделиться
Другие вопросы по тегам:

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