java对于线程池下载图片,以及图片的压缩,删除
其中引用了thumbnailator 来进行压缩减少了我们工作量
maven地址

<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.14</version>
</dependency>

jar包地址:点击下载

package test;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collector;
import java.util.stream.Collectors;import net.coobird.thumbnailator.Thumbnails;public class testtests {public static void main(String[] args) {List<Map<String, String>> list = new ArrayList<Map<String, String>>();for (int i = 0; i < 10; i++) {Map<String, String> map = new HashMap<String, String>();// 随机图片名称map.put("name", UUID.randomUUID().toString() + ".jpeg");map.put("url", "https://csdn-test-oss.oss-cn-beijing.aliyuncs.com/images/20210402024431.jpeg");list.add(map);}// 开启多线程下载downPng(list);for (int j = 0; j < list.size(); j++) {// 压缩thumbnailators("D:" + File.separator + "upload" + File.separator + list.get(j).get("name").toString());// 使用完后删除deleteFile("D:" + File.separator + "upload" + File.separator + list.get(j).get("name").toString());}}/*** 判断是否是图片* @param imgurl* @return*/private static boolean isImg(String imgurl) {String pattern = ".+(.JPEG|.jpeg|.JPG|.jpg|.png|.PNG)$";Pattern pa = Pattern.compile(pattern, Pattern.DOTALL);   Matcher ma = pa.matcher(imgurl);return ma.find();}/*** * @param name  原图* @param name2 压缩后的* @return*/public static void thumbnailators(String name) {/** 若图片横比200小,高比300小,不变 若图片横比200小,高比300大,高缩小到300,图片比例不变* 若图片横比200大,高比300小,横缩小到200,图片比例不变 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300*/try {Thumbnails.of(name).size(200, 300).toFile(name);} catch (IOException e) {// TODO Auto-generated catch blockSystem.out.println("压缩失败" + e.getMessage());}}/*** 根据url 下载文件* * @param urlString* @param filename* @return*/public static boolean download(String urlString, String filename) {try {URL url = new URL(urlString);HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();urlCon.setConnectTimeout(6000);urlCon.setReadTimeout(8000);int code = urlCon.getResponseCode();if (code != HttpURLConnection.HTTP_OK) {throw new Exception("文件读取失败,地址: " + urlString + ",状态码:" + code);}// 读文件DataInputStream in = new DataInputStream(urlCon.getInputStream());DataOutputStream out = new DataOutputStream(new FileOutputStream(filename));byte[] buffer = new byte[2048];int count = 0;while ((count = in.read(buffer)) > 0) {out.write(buffer, 0, count);}out.close();in.close();return true;} catch (Exception e) {System.out.println(e.getMessage());}return false;}public static boolean downPng(List<Map<String, String>> list) {System.out.println("开始。。。。。");long start = System.currentTimeMillis();List<Map<String,String>> list2=list.stream().filter(img->isImg(img.get("name").toString())).collect(Collectors.toList());File file = new File("D:" + File.separator + "upload");if (!file.exists()) {file.mkdirs();}try {int threadSize = Runtime.getRuntime().availableProcessors()*2;// 获取本地线程核心数,一般双倍时候io密集型ExecutorService es = Executors.newFixedThreadPool(threadSize);// 队列长度取决于列表长度ArrayBlockingQueue<Map<String, String>> queue = new ArrayBlockingQueue<Map<String, String>>(list2.size());queue.addAll(list2);for (int i = 0; i < threadSize; i++) {es.execute(new Runnable() {@Overridepublic void run() {while (!queue.isEmpty()) {// k图片地址,v图片名称Map<String, String> ImagePath;try {ImagePath = queue.poll(30, TimeUnit.MINUTES);// 在线地址 本地地址boolean flag = download(ImagePath.get("url").toString(), "D:" + File.separator+ "upload" + File.separator + ImagePath.get("name").toString());if (flag) {// System.out.println("图片下载成功");} else {System.out.println(ImagePath.get("name").toString() + "重新下载");flag = download(ImagePath.get("url").toString(), "D:" + File.separator + "upload"+ File.separator + ImagePath.get("name").toString());}} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println(e.getMessage() + "下载错误");}}}});}// 执行子线程es.shutdown();while (!es.awaitTermination(100, TimeUnit.MINUTES)) {System.out.println("状态:" + es.isShutdown() + "===============" + es.isTerminated());}} catch (Exception e) {e.printStackTrace();}long end = System.currentTimeMillis();System.out.println("下载完毕,耗时:  " + (end - start) / 1000 + "秒");return true;}/*** 删除单个文件* * @param fileName 被删除文件的文件名* @return 单个文件删除成功返回true,否则返回false*/public static boolean deleteFile(String fileName) {File file = new File(fileName);if (file.isFile() && file.exists()) {file.delete();System.out.println("删除单个文件" + fileName + "成功!");return true;} else {System.out.println("删除单个文件" + fileName + "失败!");return false;}}}

java线程池下载图片,压缩图片大小相关推荐

  1. 使用线程池的方式压缩图片

    引入依赖 <!-- 图片缩略图 --><dependency><groupId>net.coobird</groupId><artifactId& ...

  2. JAVA图片压缩指定大小范围

    图片压缩指定大小范围 图片压缩之后存在上下误差,不影响使用 @RequestMapping(value="/compress",method=RequestMethod.POST) ...

  3. 图片压缩指定大小,让您的图片高效而优美

    在现代社会中,图片是我们不可或缺的一部分,在各行业中都有着非常重要的作用.但是,大尺寸的图片不仅会占用过多的存储空间,还会导致网页或应用程序的加载速度变慢.因此,将图片压缩到指定大小是一个必要的步骤. ...

  4. java 解析m3u8的实例_使用java线程池批量下载m3u8。合并mp4.

    使用java线程池批量下载m3u8合并mp4. 看了线程池的demo,然后就想下载文件试试. 代码未必规范,多多建议. 大家可以自行修改,满足自己的需求. 还需要深入学习一下线程池. 给俺个星星⭐,可 ...

  5. 图片压缩到200k以内怎么操作?图片压缩指定大小工具推荐

    工作中经常出现图片太大无法发送或者是上传的情况,这时候就需要将图片压缩才能上传,那么怎么把图片压缩到200K以内呢?可以使用图片压缩指定大小(https://www.yasuotu.com/image ...

  6. 怎么把图片压缩指定大小?三步轻松解决

    网上有很多把图片压缩指定大小的方法,大家都觉得很难.学不会,要不就是需要下载安装各种软件,很麻烦,今天小编就给大家分享一个png图片压缩大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)的 ...

  7. java 图片压缩 图片添加水印 thumbnailator javafx

    应用截图 启动界面 添加图片 处理结果 项目地址 图片压缩: java 图片压缩 图片添加水印 thumbnailator javafx pom.xml <?xml version=" ...

  8. java 线程池 初始大小_为什么tomcat的默认线程池大小如此之大? - java

    我注意到默认的tomcat 7线程池大小似乎是200. 但是普通的CPU似乎有16个内核. 因此只能并行执行16个线程 为什么tomcat使用那么多线程. 参考方案 多年以来,许多单核计算机问世,并且 ...

  9. Java与Python下载Bing首页图片

    Java与Python下载Bing首页图片 一,首先是Java代码 import org.apache.http.HttpEntity; import org.apache.http.client.m ...

最新文章

  1. 河南科技大学c语言章节作业答案,河南科技大学C语言试题
  2. WinAPI: GetSystemDirectory - 返回 System 文件夹路径
  3. 分析Android :java.lang.UnsatisfiedLinkError: dlopen failed * is 32-bit instead of 64-bit
  4. python哪一版好用-python IDE有哪些?哪个好用?
  5. C# 结构与类的区别
  6. 江西财经计算机应用杨教授,江西财经大学信息管理学院研究生导师介绍:刘德喜...
  7. Hbase总结(八)Hbase中的Coprocessor
  8. 一个好用的Chrome倒数计时器扩展 - Calendar and Countdown
  9. ASP.NET MVC 2 学习笔记二: 表单的灵活提交
  10. 【资料整理】Eclipse快捷键
  11. [笔记]使用API函数 GetACP 获取Windows系统当前代码页
  12. Win10下Pytorch的安装和使用[斗之力三段]
  13. 图文并茂超详细搭建memcache缓存服务器(nginx+php+memcache+mysql)
  14. Sql server bulk insert
  15. 【前端】倒计时、秒杀、定时器
  16. 来了来了,2020 首场 Meetup ,可!
  17. PS2游戏手柄——基于STC15W4K32S4
  18. 游戏制作之路(25)Camera(摄像机)的清除标志Solid color
  19. 关于dvwa万能密码的问题解决
  20. 模拟器+Appium+Python抓取App内容

热门文章

  1. 设置confirm框,点击外部不关闭confirm框
  2. java前端怎么和后端连接_web后端和前端是怎么连接的
  3. Vue 注意事项,内含详细讲解
  4. Qt Java 实现短信群发功能 从搭建环境到功能实现
  5. openwrt信号弱掉线_openwrt路由器宽带频繁掉线解决方案
  6. 隐藏菜单之菜单和搜索
  7. Day17-Thymeleaf模板引擎
  8. mysql查询语句——模糊查询
  9. sql2000提示“安装程序配置服务器失败”的解决办法
  10. 服务开通语音通知功能怎样实现?