загрузка исключений из файла - PullRequest
1 голос
/ 23 апреля 2010

В моем приложении я загружаю несколько важных файлов с сервера и хочу написать код, который обрабатывает случай, когда загрузка файла не была завершена по той или иной причине, чтобы повторить попытку загрузки при следующем запуске.Однако функция, которая загружает файл за один раз, выбрасывает только MalformedURLException и IOException, но если выбрасываются эти исключения, это означает, что загрузка даже не началась.Как мне все устроить так, чтобы я мог относиться к случаю, когда загрузка не удалась, даже если она началась?

void download(String file) throws MalformedURLException ,IOException 
{

        BufferedInputStream getit = new BufferedInputStream(new URL(file).openStream());
        FileOutputStream saveit = new FileOutputStream(DOWNLOAD_PATH+fileName+"."+ZIP_EXTENSION);
        BufferedOutputStream bout = new BufferedOutputStream(saveit,1024);
        byte data[] = new byte[1024];
        int readed = getit.read(data,0,1024);
        while(readed != -1)
        {
            bout.write(data,0,readed);
            readed = getit.read(data,0,1024);
        }
        bout.close();
        getit.close();
        saveit.close();

}

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Возможно, вам лучше использовать Jakarta Commons HttpClient API.

Однако, для вашей пользовательской функции посмотрите на InterruptedIOException и bytesTransferred на http://java.sun.com/j2se/1.4.2/docs/api/java/io/InterruptedIOException.html

public class InterruptedIOException
extends IOException

Signals that an I/O operation has been interrupted. 

The field bytesTransferred indicates how many bytes were successfully transferred before the interruption occurred. 
1 голос
/ 23 апреля 2010

Если загрузка выполняется синхронно, вы должны иметь возможность добавить соответствующее исключение (или вернуть соответствующее значение) для указания сбоя.

Если загрузка выполняется асинхронно, рассмотрите возможность использования шаблона наблюдателя .Вы можете передать реализацию наблюдателя в качестве дополнительного параметра для вашего метода загрузки.

Наблюдатель в вашем случае (например) может выглядеть примерно так:

public interface FileDownloadObserver
{
  public void downloadFailed(String file, Object error);
  public void downloadSucceeded(String file);
}

Тогда метод загрузки будетвыглядит так:

void download(String file, FileDownloadObserver observer)
    throws MalformedURLException, IOException

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...