多线程文件下载 - 数组切分,截取文件名称

java 复制代码
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestThread2 extends Thread {
    private List<String> urlList;

    public TestThread2() {
    }

    public TestThread2(List<String> urlList) {
        this.urlList = urlList;
    }

    @Override
    public void run() {
        WebDownLoader webDownLoader = new WebDownLoader();
        urlList.forEach(x -> {
            try {
                System.out.println(Thread.currentThread().getName() + "执行");
                webDownLoader.downloader(x);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
    }

    public static void main(String[] args) {
        List<String> list = Arrays.asList("https://pic.xxxxx-cdn.com//1/130702.jpg",
"https://pic.xxxxx-cdn.com//1/106152.jpg",
"https://pic.xxxxx-cdn.com//1/100603.jpg",
"https://pic.xxxxx-cdn.com//1/98446.jpg",
"https://pic.xxxxx-cdn.com//1/98436.jpg",
"https://pic.xxxxx-cdn.com//1/98411.jpg",
"https://pic.xxxxx-cdn.com//1/98176.jpg",
"https://pic.xxxxx-cdn.com//1/98072.jpg");
        //切分数组
        List<List<String>> lists = splitList(list, 3);
        lists.forEach(x -> {
            TestThread2 td = new TestThread2(x);
            td.start();
        });

    }

    /**
     * @param list    数组
     * @param partNum 切分次数
     * @return 先按平均值切分,最后一次全部
     */
    private static List<List<String>> splitList(List<String> list, int partNum) {
        List<List<String>> rList = new ArrayList<>();
        int avgNum = list.size() / partNum;
        System.out.println(avgNum + ":平均数");

        for (int part = 0; part < partNum; part++) {
            //判断start起始位置 0 : avgNum * part
            int start = 0 == part ? 0 : avgNum * part;
            //判断最后一次结束位置 list.size() : start + avgNum
            int end = partNum == part + 1 ? list.size() : start + avgNum;
            System.out.println(String.format("第%s次,起始:%s 位置:%s", part + 1, start, end));
            List<String> subList = new ArrayList<>();
            for (int i = start; i < end; i++) {
//                System.out.println(list.get(i));
                subList.add(list.get(i));
            }
            rList.add(subList);
        }
        System.out.println(rList);
        return rList;
    }
}

class WebDownLoader {
    public void downloader(String url) throws IOException {
class WebDownLoader {
    public void downloader(String url) throws IOException {
        // 提取文件名
        String fileName = url.substring(url.lastIndexOf('/') + 1); // "filename.txt"
        // 提取名称部分(例如去掉扩展名)
        String name = fileName.substring(0, fileName.lastIndexOf('.')); // "filename"
        FileUtils.copyURLToFile(new URL(url), new File(fileName));
    }
}
        FileUtils.copyURLToFile(new URL(url), new File(fileName));
    }
}
相关推荐
2201_757830871 分钟前
条件分页查询
java·开发语言
重生之我是Java开发战士6 分钟前
【数据结构】Java对象的比较
java·jvm·数据结构
橘子1312 分钟前
Linux线程——一些概念(七)
java·redis·缓存
magic_kid_201016 分钟前
IDEA 复制到 Windows 远程桌面失败的原因与解决方案
java·ide·intellij-idea
风月歌18 分钟前
基于微信小程序的学习资料销售平台源代码(源码+文档+数据库)
java·数据库·mysql·微信小程序·小程序·毕业设计·源码
巴拉巴拉~~21 分钟前
KMP 算法通用步进器组件:KmpStepperWidget 横向 / 纵向 + 匹配进度 + 全样式自定义
java·服务器·开发语言
贺今宵22 分钟前
使用idea启动一个springboot项目
java·ide·intellij-idea
AAA简单玩转程序设计29 分钟前
Java传参还在瞎传?这3个进阶基础技巧少走1年弯路
java
伍一5134 分钟前
芋道框架下的进销存升级(三):Yudao-ERP2异步导出/导入Excel的设计与实现
java·excel·异步导出excel
胡闹5434 分钟前
【EasyExcel】字段赋值错乱问题
java·开发语言