当前位置: 首页 > news >正文

okhttp下载文件 Java下载文件 javaokhttp下载文件 下载文件 java下载 okhttp下载 okhttp

okhttp下载文件 Java下载文件 javaokhttp下载文件 下载文件 java下载 okhttp下载 okhttp

    • 1、引入Maven
      • 1.1、okhttp发起请求官网Demo
    • 2、下载文件
    • 3、扩充,读写 txt文件内容
      • 3.1读写内容

示例 http客户端 用的是 okhttp,也可以用 UrlConnetcion或者apache

1、引入Maven

okhttp官网

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.9</version>
</dependency>

也可以下载 okhttp jar方式引入

1.1、okhttp发起请求官网Demo

public static final MediaType JSON = MediaType.get("application/json");OkHttpClient client = new OkHttpClient();String post(String url, String json) throws IOException {RequestBody body = RequestBody.create(json, JSON);Request request = new Request.Builder().url(url).post(body).build();try (Response response = client.newCall(request).execute()) {return response.body().string();}
}

2、下载文件

public class TestDownload {public static void main(String args[]) {// 图片文件地址String url = "https://himg.bdimg.com/sys/portraitn/item/public.1.c9145b32.BtcNjpu-t6NEqWtWFh3ICg";// 创建一个 okhttp客户端线程池OkHttpClient client = new OkHttpClient.Builder().connectionPool(new ConnectionPool(20, 2, TimeUnit.MINUTES)).build();// 构建请求对象Request request = new Request.Builder().url(url).get().build();// 发起请求得到请求结果Response response = client.newCall(request).execute();// 获取请求结果ResponseBody responseBody = response.body();if (null != responseBody) {// 获取文件后缀类型 可以使用 responseBody.contentType() 获取 ContentType,我这边知道这个url文件的类型String suffix = ".jpeg";// 创建一个文件String filename = "E:\\test\\" + System.currentTimeMillis() + suffix;File file = new File(filename);// 判断目录是否存在,不存在则创建目录File parent = new File(file.getParent());if(!parent.exists()){parent.mkdir();}// 判断文件是否存在, 不存在创建文件if (!file.exists()) {if (file.createNewFile()) {// 获取请求结果输入流InputStream rInputStream = responseBody.byteStream();// 创建读取字节流的byte数组byte[] buffer = new byte[500];int areRead;// 创建文件输出流FileOutputStream outputStream = new FileOutputStream(file );// 使用输入流读取字节,在输出到文件while ((areRead = rInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, areRead);}rInputStream.close();outputStream.close();}}}response.close();}
}

3、扩充,读写 txt文件内容

3.1读写内容

    /*** 创建文件以及文件对应的目录* @param path 文件路径,例如 E:\test\测试.txt* @return {@link File}*/private File createFile(String path) throws IOException {File file = new File(path);// 判断目录是否存在File parent = new File(file.getParent());if(!parent.exists()){parent.mkdir();}if(!file.exists()){file.createNewFile();}return file;}/*** 读取txt内容* @param file {@link File}* @return 字符串*/private String readTxt(File file) throws IOException {StringBuilder sb = new StringBuilder();// 使用字符流读取BufferedReader reader = new BufferedReader(new FileReader(file));// 读取每一行的内容String readLine;while ((readLine = reader.readLine()) != null){sb.append(readLine);}String result = sb.toString();System.out.printf("读取内容: \n %s", result);reader.close();/*// 使用字节流读取long fileLength = file.length();// 创建一个用于读取指定字节大小的数组byte[] bytes = new byte[(int) fileLength];// 创建一个文件输入流FileInputStream fileInputStream = new FileInputStream(file);// 使用 文件输入流读取字节输入到 字节数组中int areRead = fileInputStream.read(bytes);String result2 = new String(bytes);fileInputStream.close();*/return result;}@Testpublic void writeTxt() throws IOException {String path = "E:\\test2\\测试.txt";File file = createFile(path);// 读取现在已有的内容String readTxt = readTxt(file);// 创建一个文件输出流FileOutputStream fileOutputStream = new FileOutputStream(file);// 之前的内容fileOutputStream.write(readTxt.getBytes(StandardCharsets.UTF_8));// 换行, 使用Java的自定义换行符号,会根据不同系统平台转义String newLine = System.getProperty("line.separator");fileOutputStream.write(newLine.getBytes());// 追加的内容fileOutputStream.write((String.valueOf(System.currentTimeMillis()) + " \r\n").getBytes(StandardCharsets.UTF_8));// 关闭资源fileOutputStream.flush();fileOutputStream.close();}
http://www.lryc.cn/news/129288.html

相关文章:

  • Oracle/PL/SQL奇技淫巧之Json转表
  • 每日一学——网络安全
  • python中的lstm:介绍和基本使用方法
  • 【Flink】Flink窗口触发器
  • 深度云化时代,什么样的云网络才是企业的“心头好”?
  • 【快应用】快应用广告学习之激励视频广告
  • 国产化系统中遇到的视频花屏、卡顿以及延迟问题的记录与总结
  • go内存管理机制
  • 【Python】Web学习笔记_flask(5)——会话cookie对象
  • 用友U8+CRM 任意文件上传+读取漏洞复现
  • 【量化课程】08_1.机器学习量化策略基础实战
  • Mongodb 更新集合的方法到底有几种 (中) ?
  • 预演攻击:谁需要网络靶场,何时需要
  • 【Linux】IO多路转接——poll接口
  • 系统架构设计师---OSI七层协议
  • Next.js - Route Groups(路由组)
  • musl libc ldso 动态加载研究笔记:01
  • 2023 年 4 款适用于安卓手机的最佳 PDF 转 Word 转换器
  • 前端:运用html+css+jquery.js实现截图游戏
  • Maven之JDK编译问题
  • 开发测试框架一 - 创建springboot工程及基础操作
  • 【IMX6ULL驱动开发学习】08.马达驱动实战:驱动编写、手动注册平台设备和设备树添加节点信息
  • 直方图均衡化和自适应直方图均衡化
  • 京东门详一码多端探索与实践 | 京东云技术团队
  • 数据挖掘 | 零代码采集房源数据,支持自动翻页、数据排重等
  • 迪米特法则
  • 云积天赫|AIGC+营销的排头兵
  • Oracle 数据库备份
  • 【C++】模板template
  • 智能工厂:适应不断变化的制造世界