okhttp3 下载文件流,保存文件

1、文件保存的path
public static final String download_draw_path = new StringBuilder(Environment.getExternalStorageDirectory()
        .getAbsolutePath())
        .append(File.separator).append("TestMxLib").append(File.separator)
        .toString();

2、判断保存的路径是否存在

    public static String isExistDir(String saveDir) throws IOException {
        // 下载位置
        File downloadFile = new File(saveDir);
        if (!downloadFile.exists()) {
            downloadFile.mkdirs();
        }
        String savePath = downloadFile.getAbsolutePath();
//        LogFileUtil.e("savePath", savePath);
        return savePath;
    }

3、okhttp3封装,不再赘述,正常post请求

OkHttp3Util.doPost(url, "", new Callback() {
    String strRet = "";

    public void onFailure(Call call, final IOException e) {
       
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {

        long length = response.body().contentLength();
        Log.e(Tag, "下载文件," + "文件大小length::" + length);

        // 判断路径是否存在文件夹
        String savePath = isExistDir(Config.download_draw_path);
        // 文件名,根据具体情况的下载文件类型命名 (.txt .word 等)
        String fileName = "/test_draw.dwg"
        File file = new File(savePath,fileName  );
        Log.e(Tag, "下载文件,getPath>>>" + file.getPath());

        // 下面从返回的输入流中读取字节数据并保存为本地文件
        try (InputStream is = response.body().byteStream();
             FileOutputStream fos = new FileOutputStream(file)) {
            byte[] buf = new byte[100 * 1024];
            int sum = 0, len = 0;
            while ((len = is.read(buf)) != -1) {
                fos.write(buf, 0, len);
                sum += len;
                int progress = (int) (sum * 1.0f / length * 100);
                String detail = String.format("文件保存在%s。已下载%d%%", file.getPath(), progress);
                Log.e(Tag, "下载图纸,detail>>>" + detail);
            }
           
           Log.e(Tag,"文件下载完毕....");
          
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值