okhttp远程调用下载文件

okhttp远程调用下载文件

最近做一个项目,因为是做安卓然后安卓这边环境建议是用okhttp,需要远程调用一个接口拿到文件。
我百度用 response.body().byteStream() 流里面是空的
然后用的 response.body().source().inputStream(); 成功拿到数据

话不多说开始

//OKhttp依赖
  <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.0</version>
  </dependency>
 public static void main(String[] args) {

        String url = "自己的URL";
        //String url = "https://github.com/hongyangAndroid";
        final String fileName = "";
        OkHttpClient okHttpClient = new OkHttpClient();
        final Request request = new Request.Builder()
                .get()
                .url(url)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
        	//失败的回调进行补充逻辑
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                if (call.isCanceled()){
                    System.out.println("远程调用取消");
                }
                if (call.isExecuted()){
                    System.out.println("远程调用执行");
                }

            }
            //成功的回调
            @Override
            public void onResponse(@NotNull Call call, @NotNull okhttp3.Response response) throws IOException {
                if (call.isCanceled()){
                    System.err.println("远程调用取消");
                }
                if (call.isExecuted()){
                    System.err.println("远程调用执行成功");
                }
                //请求成功返回的流
                InputStream inputStream = response.body().source().inputStream();
                String path = ResourceUtils.getURL("src\\main\\resources\\zip\\").getPath();
                System.out.println(path);
                File file = new File(path);
                if (!file.exists()){
                    file.mkdirs();
                }
                //文件夹名称
                String filename="0.zip";
                //下载文件保存位置
                String savepath=path+"\\"+filename;
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File(savepath)));
                byte[] data=new byte[1024];
                int len;
                int available = inputStream.available();
                while ((len=inputStream.read(data))!=-1){
                    bufferedOutputStream.write(data,0,len);
                }
                bufferedOutputStream.flush();
                bufferedOutputStream.close();
                inputStream.close();

                //解压缩文件保存路径
                String outpath=path+"\\"+0;
                ZipUtil.unZip(savepath,outpath);
                PropertiesUtil propertiesUtil = new PropertiesUtil("zip\\0\\json.properties");
                String json = propertiesUtil.readProperty("json");
                System.out.println(json);
                //把JSON返回成一个List集合

            }
        });
            }

我这里拿到的是一个压缩包,返回的JSON信息是放在json.properties
我因为是调用一个下载文件的请求,所以这样子去用,
如果单纯的拿的是一个JSON格式的数据可以用response.body().string()

我后面会写一个博客去读写json.properties


版权声明:本文为qq_41183828原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。