在我的应用程序中,我从服务器下载了几个关键文件,我想编写一些代码来处理文件下载由于某种原因而无法完成的情况,以便在下次启动时重新下载它。但是,一次下载文件的函数只会抛出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();
}
答案 0 :(得分:2)
您最好使用Jakarta Commons HttpClient
API。
但是,对于您的自定义功能,请查看http://java.sun.com/j2se/1.4.2/docs/api/java/io/InterruptedIOException.html上的InterruptedIOException
和bytesTransferred
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
这是假设您可以实际检测到下载失败。如果没有,您可能需要提供有关如何进行下载的更多信息。