下载文件异常处理

时间:2010-04-23 09:31:38

标签: java

在我的应用程序中,我从服务器下载了几个关键文件,我想编写一些代码来处理文件下载由于某种原因而无法完成的情况,以便在下次启动时重新下载它。但是,一次下载文件的函数只会抛出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 个答案:

答案 0 :(得分:2)

您最好使用Jakarta Commons HttpClient API。

但是,对于您的自定义功能,请查看http://java.sun.com/j2se/1.4.2/docs/api/java/io/InterruptedIOException.html上的InterruptedIOExceptionbytesTransferred

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 :(得分:1)

如果下载是同步的,您应该能够添加适当的异常(或返回适当的值)以指示失败。

如果下载是异步的,请考虑使用observer pattern。您可以将观察者实现作为额外参数传递给下载方法。

您案例中的观察者(例如)可能看起来像:

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

然后下载方法如下:

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

这是假设您可以实际检测到下载失败。如果没有,您可能需要提供有关如何进行下载的更多信息。