package com.framework.okhttp.callback;
import com.framework.okhttp.OkHttpProxy;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.Response;
public abstract class FileCallBack extends OkHttpCallBack<File> {
private String dstFileDir; // 目标文件存储的文件夹路径
private String dstFileName; // 目标文件存储的文件名
public abstract void inProgress(float progress);
public FileCallBack(String dstFileDir, String dstFileName) {
this.dstFileDir = dstFileDir;
this.dstFileName = dstFileName;
}
@Override
public File parseResponse(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;
File dir = new File(dstFileDir);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, dstFileName);
fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1) {
sum += len;
fos.write(buf, 0, len);
final long finalSum = sum;
OkHttpProxy.getInstance().getHandler().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) {
e.printStackTrace();
}
try {
if (fos != null) fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}