Java (Android) IOException: полномочия ожидаются в индексе 7: http://

Я пытаюсь заставить эту функцию загружать файл из Интернета. Я передаю ему два аргумента: from - url на файл в сети, to - локальный путь к файлу; Проблема, которую выдает IOException при открытии потока:

Authority expected at index 7: http://

Вот мой код:

private boolean downloadFile(String pathFrom, String pathTo)
{
    URL url;
    ReadableByteChannel rbc;
    FileOutputStream fos;

    try {
        url = new URL(pathFrom);
        rbc = Channels.newChannel(url.openStream());
        fos = new FileOutputStream(pathTo);
        fos.getChannel().transferFrom(rbc, 0, 1 << 24);
        return true;
    } catch (MalformedURLException e) {
        Log.e(TAG, "Failed to download file (" + pathFrom + ") because of malformed URL.");
    } catch (FileNotFoundException e) {
        Log.e(TAG, "Failed to download file (" + pathFrom + ") because FileNotFoundException occured when opening output stream: " + e.getMessage());
    } catch (IOException e) {
        Log.e(TAG, "Failed to download file (" + pathFrom + ") because IOException occured when transfering file or opening input stream: " + e.getMessage());
    }

    return false;
}

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

Кто-нибудь знает, что вызывает это и / или как это исправить?

P.S. У меня есть оба разрешения на использованиеINTERNET и WRITE_EXTERNAL_STORAGE


person Pijusn    schedule 15.08.2011    source источник


Ответы (1)


Попробуйте закодировать URL-адрес с помощью URLEncoder в формате UTF-8 .

Образец кода:

String encodedUrl = URLEncoder.encode(url.toString(), "UTF-8"); 
person Wroclai    schedule 15.08.2011
comment
Он искажает мой URL-адрес (заменяет косую черту на %2F и ':' на %3A) и вызывает исключение вредоносного URL-адреса. - person Pijusn; 15.08.2011
comment
Хм, без дополнительной информации, какой у вас персонаж под индексом 7? Я думаю, что это, вероятно, что-то с самим URL. - person Wroclai; 15.08.2011
comment
Ты прав. Я снова и снова читал журналы и обнаружил, что в какой-то момент http://... меняется на http:/... :| Это вызвано File.getParent() (используется для удаления имени файла из URL). Для этого нужно найти новую функцию. - person Pijusn; 15.08.2011