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版权协议,转载请附上原文出处链接和本声明。