Android の HTTP アドレスからファイルをダウンロードするコードをまとめています。ダウンロードが途中で失敗した場合、ダウンロードの再開をサポートしたいと思います。
ダウンロードを開始し、wifi 接続を切断して数回再起動したときに得られる出力は次のとおりです。
開始サイズ 0 停止サイズ 12333416 開始サイズ 12333416 停止サイズ16058200 開始サイズ3724784
最初の再開後、部分的にダウンロードされたファイルのその後のファイル サイズの読み取り値が一致しない理由がわかりません。
前もって感謝します!
public void download(String source, String target) throws IOException {
BufferedOutputStream outputStream = null;
InputStream inputStream = null;
try {
File targetFile = new File(target);
currentBytes = targetFile.length();
Log.i(TAG, "Start size " + String.valueOf(currentBytes));
outputStream = new BufferedOutputStream(new FileOutputStream(targetFile));
// create the input stream
URLConnection connection = (new URL(source)).openConnection();
connection.setConnectTimeout(mCoTimeout);
connection.setReadTimeout(mSoTimeout);
inputStream = connection.getInputStream();
inputStream.skip(currentBytes);
// calculate the total bytes
totalBytes = connection.getContentLength();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) > 0) {
// write the bytes to file
outputStream.write(buffer, 0, bytesRead);
outputStream.flush();
currentBytes += bytesRead;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
// close the output stream
outputStream.flush();
outputStream.close();
}
if (inputStream != null) {
// close the input stream
inputStream.close();
}
Log.i(TAG, "Stop size " + String.valueOf(currentBytes));
}
}