package com.demo.lib.common.okhttp.callback; import com.demo.lib.common.okhttp.OkHttpUtils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import okhttp3.Response; /** * Created by zhy on 15/12/15. */ public abstract class FileCallBack extends Callback { /** * 目标文件存储的文件夹路径 */ private String destFileDir; /** * 目标文件存储的文件名 */ private String destFileName; public FileCallBack(String destFileDir, String destFileName) { this.destFileDir = destFileDir; this.destFileName = destFileName; } @Override public File parseNetworkResponse(Response response, int id) throws Exception { return saveFile(response,id); } public File saveFile(Response response,final int id) 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(destFileDir); if (!dir.exists()) { dir.mkdirs(); } File file = new File(dir, destFileName); fos = new FileOutputStream(file); while ((len = is.read(buf)) != -1) { sum += len; fos.write(buf, 0, len); final long finalSum = sum; OkHttpUtils.getInstance().getDelivery().execute(new Runnable() { @Override public void run() { inProgress(finalSum * 1.0f / total,total,id); } }); } fos.flush(); return file; } finally { try { response.body().close(); if (is != null) is.close(); } catch (IOException e) { } try { if (fos != null) fos.close(); } catch (IOException e) { } } } }