我试图在我的应用中处理某些文件的下载。基本上我在需要时下载文件并将其显示给用户。
我还想抓住下载的文件作为缓存,所以我在网址上使用哈希,当地图与现有文件冲突时,我认为它是缓存命中。
我的伪代码是:
String filename = hash(url);
File outputFile = new File(cacheFolder,filename);
if(!outputFile.exists()){
download(url,outputFile);
}
return outputFile;
我用来从网址下载文件的代码是;
URL url = new URL(urlToDownload);
URLConnection connection = url.openConnection();
connection.connect();
// this will be useful so that you can show a typical 0-100% progress bar
int fileLength = connection.getContentLength();
// download the file
InputStream input = new BufferedInputStream(connection.getInputStream());
OutputStream output = new FileOutputStream(outputFile.getAbsolutePath());
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
它工作得很好但我在检测以下情况时遇到问题:
我该如何解决这个问题?
我应该在临时文件中下载并在完成时将其复制到outputFile吗?或者这可能会导致不必要的开销。
有没有办法避免在下载完成之前创建文件而不使用临时文件+复制方法?
由于