Как обрабатывать пустое место в URL при загрузке изображения из Интернета? - PullRequest
2 голосов
/ 02 ноября 2011

Я работаю над проектом, где в URL иногда могут быть пустые места (не всегда), например: www.google.com/ example / test.jpg, а иногда и www.google.com/example/test.jpg. .

Мой код:

     try {
            URL url = new URL(stringURL);
            URLConnection conexion = url.openConnection();
            conexion.connect();

            // downlod the file
            InputStream input = new BufferedInputStream(url.openStream(), 8192);
            OutputStream output = new FileOutputStream(fullPath.toString());

            byte data[] = new byte[1024];

            while ((count = input.read(data)) != -1) {
                output.write(data, 0, count);
            }
            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

Ошибка этой строки: InputStream input = new BufferedInputStream (url.openStream (), 8192);

с исключением: java.io.FileNotFoundException.

Я пытался закодировать конкретную строку, но вот кикер: серверу нужно пустое место "", чтобы найти файл, поэтому мне нужно каким-то образом иметь свободное место. Я могу найти файл (JPG), если я использую браузер Firefox. Любая помощь высоко ценится.

Редактировать обновление: Что ж, теперь я попытался закодировать каждый бит после основной части URL в utf-8, и я попытался использовать и +, и% 20 для пробела. Теперь я могу управлять DL файлом, но он будет неисправен, поэтому его невозможно прочитать.

Редактировать обновление2: Я ошибся с% 20, это работает.

1 Ответ

2 голосов
/ 02 ноября 2011

Хорошо, я решил головную боль.

Сначала я использую:

completeUrl.add(URLEncoder.encode(finalSeperated[i], "UTF-8"));

Для каждой части URL между "/"

Тогда я использую:

    ArrayList<String> completeUrlFix = new ArrayList<String>();
    StringBuilder newUrl = new StringBuilder();
    for(String string : completeUrl) {
        if(string.contains("+")) {
            String newString = string.replace("+", "%20");
            completeUrlFix.add(newString);
        } else {
            completeUrlFix.add(string);
        }
    }

    for(String string : completeUrlFix) {
        newUrl.append(string);
    }

Чтобы создать правильную строку urlString.

Причина, по которой это работает, заключается в том, что http нужен% 20. См. Процент кодирования проблемных областей в Java Комментарий Powerlord

...