package com.cheng.networkframestudy.okhttp.frame.callback;
import android.util.Log;
import com.cheng.networkframestudy.okhttp.frame.OkHttpUtil;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.Response;
/**
* 李旺成
* 2016年2月20日08:14:37
*/
public abstract class FileCallBack extends Callback<File> {
private String mDestFileDir; // 目标文件存储的文件夹路径
private String mDestFileName; // 目标文件存储的文件名
public abstract void inProgress(float progress);
public FileCallBack(String destFileDir, String destFileName) {
this.mDestFileDir = destFileDir;
this.mDestFileName = destFileName;
}
@Override
public File parseNetworkResponse(Response response) throws Exception {
return saveFile(response);
}
public File saveFile(Response response) throws IOException {
InputStream is = null;
byte[] buf = new byte[2048];
int len = 0;
FileOutputStream fos = null;
try {
is = response.body().byteStream();
final long total = response.body().contentLength();
long sum = 0;
Log.e("FileCallBack", total + "");
File dir = new File(mDestFileDir);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, mDestFileName);
fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1) {
sum += len;
fos.write(buf, 0, len);
final long finalSum = sum;
OkHttpUtil.getInstance().getDelivery().post(new Runnable() {
@Override
public void run() {
inProgress(finalSum * 1.0f / total);
}
});
}
fos.flush();
return file;
} finally {
try {
if (is != null) is.close();
} catch (IOException e) {
}
try {
if (fos != null) fos.close();
} catch (IOException e) {
}
}
}
}