我正在尝试下载几个文件。就我而言,服务器不返回连接长度。因此,我无法检查天气文件是否已完全下载。
如果下载不完整,我正在使用以下代码下载文件的其余部分。
long length = 0;
if(file.exists()) length = file.length();
URL url = null;
try {
url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
FileOutputStream out;
if(length==0)
out = new FileOutputStream(file.getPath());
else {
connection.setRequestProperty("Range", "bytes="+length+"-");
out = new FileOutputStream(file.getPath(),true);
}
connection.connect();
BufferedInputStream in = new BufferedInputStream(connection.getInputStream());
byte[] buf = new byte[1024];
int n = in.read(buf);
if(n!=-1 && !(new String(buf,"UTF-8")).startsWith("<"))
do out.write(buf, 0, n); while (-1 != (n = in.read(buf)));
out.close(); in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
正在发生的事情是,完整的文件将再次下载并附加到先前下载的文件中。
connection.setRequestProperty(“ Range”,“ bytes =” + length +“-”);似乎不起作用。
谁能建议一种更好的方法来完成部分下载的文件的下载。