精华内容
下载资源
问答
  • Java一次性下载多个文件

    千次阅读 2019-09-12 15:46:08
    最近项目遇到一个需求,需要一次性导出全部数据-,而且是按照500条数据一个文件。 话不说,开始。 新增Excel工具类 可以直接复制 import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util....

    最近项目遇到一个需求,需要一次性导出全部数据-,而且是按照500条数据一个文件。
    话不多说,开始。

    新增Excel工具类

    可以直接复制

    
    import org.apache.poi.hssf.usermodel.*;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.ss.util.CellRangeAddress;
    //关于下面这两个包,可以直接用Java自带的,也可以导入
    //我这里是导入的,可以进行一个编码的设置,不过我是没有设置成功,反而乱码
    //建议里面的文件名什么的都用英文,不用担心乱码,哈哈
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class ExportExcel {
    
        // 显示的导出表的标题
        private String title;
        // 导出表的列名
        private String[] rowName;
        private List<Object[]> dataList = new ArrayList<Object[]>();
    
        public ExportExcel() {
        }
    
        // 构造函数,传入要导出的数据
        public ExportExcel(String title, String[] rowName, List<Object[]> dataList) {
            this.dataList = dataList;
            this.rowName = rowName;
            this.title = title;
        }
    
        // 导出数据
        public void export(OutputStream out) throws Exception {
            try {
                HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet sheet = workbook.createSheet(title);
    
                // 产生表格标题行
                HSSFRow rowm = sheet.createRow(0);
                HSSFCell cellTitle = rowm.createCell(0);
    
    
                //sheet样式定义【】
                HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);
                HSSFCellStyle style = this.getStyle(workbook);
                sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length - 1)));
                cellTitle.setCellStyle(columnTopStyle);
                cellTitle.setCellValue(title);
    
                // 定义所需列数
                int columnNum = rowName.length;
                HSSFRow rowRowName = sheet.createRow(2);
    
                // 将列头设置到sheet的单元格中
                for (int n = 0; n < columnNum; n++) {
                    HSSFCell cellRowName = rowRowName.createCell(n);
                    cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);
                    HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
                    cellRowName.setCellValue(text);
                    cellRowName.setCellStyle(columnTopStyle);
    
                }
                // 将查询到的数据设置到sheet对应的单元格中
                for (int i = 0; i < dataList.size(); i++) {
                    Object[] obj = dataList.get(i);// 遍历每个对象
                    HSSFRow row = sheet.createRow(i + 3);// 创建所需的行数
    
                    for (int j = 0; j < obj.length; j++) {
                        HSSFCell cell = null;
                        //这几行被注释掉的代码,是给表格第一列进行一个赋值起一个编号的效果,不过我认为没必要
    //                    if (j == 0) {
    //                        cell = row.createCell(j, HSSFCell.CELL_TYPE_NUMERIC);
    //                        cell.setCellValue(i + 1);
    //                    } else {
                            cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
                            if (!"".equals(obj[j]) && obj[j] != null) {
                                cell.setCellValue(obj[j].toString());
                            }
    //                    }
                        cell.setCellStyle(style);
    
                    }
    
                }
    
                // 让列宽随着导出的列长自动适应
                for (int colNum = 0; colNum < columnNum; colNum++) {
                    int columnWidth = sheet.getColumnWidth(colNum) / 256;
                    for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
                        HSSFRow currentRow;
                        if (sheet.getRow(rowNum) == null) {
                            currentRow = sheet.createRow(rowNum);
                        } else {
                            currentRow = sheet.getRow(rowNum);
                        }
                        if (currentRow.getCell(colNum) != null) {
                            HSSFCell currentCell = currentRow.getCell(colNum);
                            if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                                int length = currentCell.getStringCellValue().getBytes().length;
                                if (columnWidth < length) {
                                    columnWidth = length;
                                }
                            }
                        }
                    }
                    if (colNum == 0) {
                        sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
                    } else {
                        sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
                    }
                }
    
                if (workbook != null) {
                    try {
    
                        workbook.write(out);
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    
            } catch (Exception e) {
    
            }
    
    
        }
    
        /**
                * 列头单元格样式
       */
        public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {
            // 设置字体
            HSSFFont font = workbook.createFont();
    
            // 设置字体大小
            font.setFontHeightInPoints((short) 11);
            // 字体加粗
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            // 设置字体名字
            font.setFontName("Courier New");
            // 设置样式
            HSSFCellStyle style = workbook.createCellStyle();
            // 设置低边框
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            // 设置低边框颜色
            style.setBottomBorderColor(HSSFColor.BLACK.index);
            // 设置右边框
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            // 设置顶边框
            style.setTopBorderColor(HSSFColor.BLACK.index);
            // 设置顶边框颜色
            style.setTopBorderColor(HSSFColor.BLACK.index);
            // 在样式中应用设置的字体
            style.setFont(font);
            // 设置自动换行
            style.setWrapText(false);
            // 设置水平对齐的样式为居中对齐;
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            return style;
    
        }
    
        public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
            // 设置字体
            HSSFFont font = workbook.createFont();
            // 设置字体大小
            font.setFontHeightInPoints((short) 10);
            // 字体加粗
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            // 设置字体名字
            font.setFontName("Courier New");
            // 设置样式;
            HSSFCellStyle style = workbook.createCellStyle();
            // 设置底边框;
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            // 设置底边框颜色;
            style.setBottomBorderColor(HSSFColor.BLACK.index);
            // 设置左边框;
            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            // 设置左边框颜色;
            style.setLeftBorderColor(HSSFColor.BLACK.index);
            // 设置右边框;
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            // 设置右边框颜色;
            style.setRightBorderColor(HSSFColor.BLACK.index);
            // 设置顶边框;
            style.setBorderTop(HSSFCellStyle.BORDER_THIN);
            // 设置顶边框颜色;
            style.setTopBorderColor(HSSFColor.BLACK.index);
            // 在样式用应用设置的字体;
            style.setFont(font);
            // 设置自动换行;
            style.setWrapText(false);
            // 设置水平对齐的样式为居中对齐;
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            // 设置垂直对齐的样式为居中对齐;
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            return style;
        }
    
        //压缩文件
        public void ZipFiles(File[] srcfile, File zipfile) {
            ZipOutputStream out = null;
    
            byte[] buf = new byte[1024];
            try {
                out = new ZipOutputStream(new FileOutputStream(
                        zipfile));
    //            out.setEncoding("UTF-8");
                for (int i = 0; i < srcfile.length; i++) {
                    FileInputStream in = new FileInputStream(srcfile[i]);
                    out.putNextEntry(new ZipEntry(srcfile[i].getName()));
                    int len;
                    while ((len = in.read(buf)) > 0) {
                        out.write(buf, 0, len);
                    }
                    out.closeEntry();
                    in.close();
                }
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /***
         * 删除指定文件夹下所有文件
         *
         * @param path 文件夹完整绝对路径
         * @return
         */
        public static boolean delAllFile(String path) {
            boolean flag = false;
            File file = new File(path);
            if (!file.exists()) {
                return flag;
            }
            if (!file.isDirectory()) {
                return flag;
            }
            String[] tempList = file.list();
            File temp = null;
            for (int i = 0; i < tempList.length; i++) {
                if (path.endsWith(File.separator)) {
                    temp = new File(path + tempList[i]);
                } else {
                    temp = new File(path + File.separator + tempList[i]);
                }
                if (temp.isFile()) {
                    temp.delete();
                }
                if (temp.isDirectory()) {
                    delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
                    flag = true;
                }
            }
            return flag;
        }
    
    }
    
    

    具体业务代码

    注:
    1、对数据预处理

     		String title = "业主信息表";//这个是表格的标题,不是文件名
     		//每个单元格的标题,具体内容自己设置
            String[] rowsName = {"业主id", "姓名","身份证号","楼栋号", "单元号", "楼层号", "房间号", "电话号码"};
            //存放需要的数据
            ArrayList<Object[]> dataList = new ArrayList<>();
            Object[] objs = null;
            //根据业务需求,查询出要导出的数据
            List<CitRoomMaster> list = citRoomMasterService.getList();
            //将全部数据按需加载到dataList中
            //对null值进行一个处理,因为如果是空的导入文件中会造成整个文件损坏,读取不到任何数据
            for (CitRoomMaster c :list) {
                objs = new Object[rowsName.length];
                objs[0] = c.getId();
                objs[1] = c.getUsername() == null?"未录入":c.getUsername();
                objs[2] = c.getIdCard() == null?"未录入":c.getIdCard();
                objs[3] = c.getBuilding() == null?"未录入":c.getBuilding();
                objs[4] = c.getUnit() == null?"未录入":c.getUnit();
                objs[5] = c.getRoomLevel() == null?"未录入":c.getRoomLevel();
                objs[6] = c.getRoomNum() == null?"未录入":c.getRoomNum();
                objs[7] = c.getTel() == null?"未录入":c.getTel();
                dataList.add(objs);
            }
    

    2、按500条数据进行Excel文件生成

    // 将excel导出的文件位置,临时文件,注意,一定是一个不存在的文件,因为后面会把这个文件夹删完
            String filePath = "C:\\小区业主信息"+ File.separator;
            // 得到此路径下文件
            File fileDir = new File(filePath);
            //创建文件夹
            if (!fileDir.exists() && !fileDir.isDirectory()) {
                fileDir.mkdirs();
            }
            // 用于存放生成的excel文件名称
            List<String> fileNames = new ArrayList<String>();
            // 导出Excel文件的路径
            String fullFilePath = "";
            //输出流
            FileOutputStream os = null;
    //拿到整个需要循环导出的次数
            int length = list.size()%500 == 0 ? list.size()/500 : (list.size()/500)+1;
            for (int i = 0; i < length; i++) {
                //给文件命名。随机命名 自定义
                String fileName = "OwnerInformation-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls";
    //生成Excel文件导出的路径
                fullFilePath = filePath + File.separator + fileName;
                fileNames.add(fullFilePath);
                os = new FileOutputStream(fullFilePath);
                //调用poi的工具类
                int end = 0;
                //对list进行截取,每500条数据
                ExportExcel ex = new ExportExcel(title, rowsName, dataList.subList(i*500,end = (i+1)*500<=list.size()?(i+1)*500:list.size()));
                try {
                    ex.export(os);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                os.flush();
                os.close();
                os = null;
            }
    

    3、将存放Excel的文件夹压缩导出,就完成需求了

    //告诉浏览器数据格式,将头和数据传到前台
            String headStr = "attachment; filename=\"" + zip.getName() + "\"";
            response.setContentType("APPLICATION/zip");
    //        response.setHeader("Location",zip.getName());
            response.setHeader("Content-Disposition", headStr);
            OutputStream out = response.getOutputStream();
            InputStream in = new FileInputStream(zipFilePath);
            byte[] buffer = new byte[1024];
            int i = -1;
            while ((i = in.read(buffer)) != -1) {
                out.write(buffer, 0, i);
            }
            out.flush();
            out.close();
            in.close();
            out = null;
            try {
                excelUtil.delAllFile(filePath); // 删除完里面所有内容
                filePath = filePath.toString();
                java.io.File myFilePath = new java.io.File(filePath);
                myFilePath.delete(); // 删除空文件夹
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    最后再说一点,还是关于中文乱码的问题,本来最开始的我是用的中文写文件名,并且在自己电脑上测试的时候是么有乱码的。但是部署到公司服务器上,就乱码了,怀疑是编码不一致问题导致的,因为时间问题,也没有去调试了。所以,如果有小伙伴能够解决这个问题,希望不吝赐教。

    展开全文
  • 还不会怎样同时打开多个微信?一次性打包带走吧

    万次阅读 多人点赞 2021-07-17 04:09:12
    随着微信的广泛应用,大家很有可能有两个或多个微信,不再只使用个微信了。因此,微信多开,在电脑上同时登录多个微信,对我们日常的使用起到狠便捷的作用。在这里聊聊怎样在 PC 端同时登录多个微信。

    前段时间,工作室里有位大一的师弟老是问我(真不止一次啦-.-),有木有不那么麻烦,就可以打开多个微信的方法。方法呢感觉挺多的,不复杂的操作也有一些。所以下面在这里聊下一些比较简易的操作,通过这些操作来实现同时打开多个微信的效果。

    掌握以下方法,学会多开微信,同时登录使用多个微信之后,也方面管理鱼塘的鱼喔🙃。

    一、 直接通过键鼠操作

     

    首先,我们先用 鼠标左键 点击一下微信图标

    在这里插入图片描述
    接着,按 回车键注意: 每按一次回车,相当于打开一个微信登录窗口。如果按定回车键不放的话,就会打开一坨登录窗口的~)

    在这里插入图片描述
    这里呢我是敲击了两次回车键,所以屏幕上打开了两个微信登录窗口。

     

    下面放张动图演示一下

    在这里插入图片描述

    最后登录就可以了。

    二、 编写脚本来打开微信

    先找到我们电脑中,微信这个程序的 绝对路径 ,然后复制这个绝对路径

    比如在桌面上,有微信的图标,那么我们可以 点击选中 微信图标后直接 右键 ,接着点击 属性 ,然后在弹出的窗口上方选择 快捷方式 ,在 ”目标(T)“ 这一栏后面的地址,就是电脑上微信这个程序的绝对路径了。

    如果 桌面 上没有图标或者 开始 栏里没有快捷方式的话,要根据自己的安装目录去寻找,或者借助其他第三方工具(比如 Everything 等,需要的话可私信) 。

    在这里插入图片描述

    接着,新建一个记事本(快捷键:Win + r ,输入 notepad ;或者直接鼠标右键,新建一个文本文档)

    在这里插入图片描述

    在里面输入以下内容,每一行代表打开一个微信窗口 (根据自己情况选择,需要打开多几个的话就粘贴多几遍)

    start " " "E:\WeChat\WeChat\WeChat.exe"
    

    (需要注意的是:①符号为英文符号;②第二对双引号,引住的为微信的绝对路径,要根据自己的情况进行调整,直接复制再粘贴上去就可以了。)
    在这里插入图片描述

    然后点击 保存 (快捷键:Ctrl + s),文件格式修改为 .bat ,如下图所示

    在这里插入图片描述

    最后,直接打开这个文件,就可以启动微信了。

    下面展示下动图(这里的话我们以打开两个微信登录窗口为例吧)。

    在这里插入图片描述

    好了,方法先介绍到这里啦。

    当然啦,如果是肯接受通过 下载 其他软件(包括但不限于第三方工具),来解决微信多开这个问题的话呢,也还是有一些工具/方法推荐的(可留言私信喔)。不过不太建议哈,毕竟使用一些不太复杂的操作就能解决问题了,为啥还要安装那么多东西在电脑上呢(●’◡’●)


    如果文章对你有帮助,请点个😊,顺带留个评论,将感激不尽😉。如果能给个三连(点赞收藏关注 )就最好啦😁。

    展开全文
  •  1. 一次性复制文件夹中的所有文件名 在文件夹中新建一txt文件,其中输入命令 DIR *.* /B >LIST.TXT ...2.一次性复制文件夹中的所有文件的完整路径 在文件夹中新建一txt文件,其中输入命令
    

    1. 一次性复制文件夹中的所有文件名

    在文件夹中新建一个txt文件,其中输入命令


    DIR *.*  /B >LIST.TXT

    保存后,更改文件后缀名为.dat,双击运行,生成新的txt文件(LIST.txt),在LIST.txt文件中就保存着文件夹下的所有文件名。


    2.一次性复制文件夹中的所有文件的完整路径

    在文件夹中新建一个txt文件,其中输入命令


    dir /s/b *.txt > data.lst


    同样 更改后缀名,双击运行,在data.lst文件中保存所有文件的完整路径。


    从上面可以看出,保存文件名的文件 我们可以任意定义,包括文件名和文件格式。

    展开全文
  • Linux下同时复制多个文件

    万次阅读 2018-09-04 09:58:49
    使用cp命令:需要注意的是这几个文件之间不要有空格 cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/  参考文件:https://www.cnblogs.com/zhonghuasong/p/7352758.html...

    方法一

    1. 使用cp命令:需要注意的是这几个文件之间不要有空格
    cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/

     参考文件:https://www.cnblogs.com/zhonghuasong/p/7352758.html

    展开全文
  • 经常需要复制一个文件到几个文件夹里,本来想做个Script,顺便学一下Python
  • 在做asp.net的Web开发的时候,我们经常会遇到一次性上传多个文件的需求。通常我们的解决方法是固定放多个上传文件框,这样的解决办法显然是不合理的,因为一次上传多个,就意味着数量不确定。因此我们就要让这些文件...
  • 比如有一个/usr/tmp/ 下面有几目录 dira, dirb,dirc, 现在要想把 /usr/tmp 拷贝到 /home/xx/ 下面,但又不想要dirc 使用rsync --exclude cd/usr # 将tmp目录下的文件复制到 /home/xx/,排除其中的dirc目录 ...
  • 《批量搜索大师》V3.1是款功能强大的批量搜索软件,简洁,方便,实用。支持同时搜索多个文件,把搜索出来的文件一键复制个文件夹。
  • 最近做系统,有很多人提出要直接粘贴Excel里的信息上去,手输太麻烦了,所以就去试了下。 开始的时候,有点转牛角尖里去了,老想着...这里碰到了一个问题,就是不知道Excel里联系单元格之间的分隔符是什么,后来测试出
  • cmd命令之批量复制文件多个不同文件名的文件
  • 软件:Excel 2010 把需要生成的工作表名字整理到Excel,或者在原有的文件上操作 选择插入数据透视表 右键,数字透视表选项-选择经典… 为的是可以拖拽字段更直观 第五步:复制区域覆盖透视表范围 ...
  • linux下一次cp多个文件

    万次阅读 2016-10-02 10:23:22
    linux下使用cp命令拷贝多个文件有几种方法,是使用通配符,二是使用管道 .通配符的使用 通配符是种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。主要的通配符有: * 匹配任意长度的字符串 ...
  • 这样就可以用file.copy(源图片,目标图片,ture)将图片拷贝到另一个文件夹了,但问题是这样操作一张图片很简单,但是文件夹里有很图片,我怎么得到每一张图片的名字并能分离开每一个图片名称?不知道描述的意思...
  • 原帖地址   ... 按键精灵如何批量复制文本,再往excel里面一次性粘贴? 我目前只会一点点简单的按键精灵技巧。写...
  • 如何一次性选中WORD文档中的所有表格

    万次阅读 多人点赞 2018-12-07 11:44:31
    1 将下面的脚本复制 Sub SelectAllTables()  Dim tempTable As Table   Application.ScreenUpdating = False   '判断文档是否被保护  If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then  Ms....
  • 2.两进程可以任意对文件进行读写操作,操作系统并不保证写的原子 3.进程可以通过系统调用对文件加锁,从而实现对文件内容的保护 4.任何一个进程删除该文件时,另外一个进程不会立即出现读写失败 5.两进程可以...
  • 最近工作经常要把张相同表头,不同内容的数据汇总到一张excel中,为节省复制粘贴时间,我找到了Python中的openpyxl模块进行处理,读取一个文件夹下所有的excel文件并写入一张excel中。 话不说没直接上代码-->...
  • QQ(微信)一次性发送条信息(连续发520遍我爱你)

    千次阅读 多人点赞 2020-04-10 15:43:44
    1,建立一个txt文件,写入下面内容 set wshshell=wscript.createobject("wscript.shell") wshshell.AppActivate"我家丫头" //发送给谁 for i=1 to 3 //循环几,这里是3 wscript.sleep ...
  • 假设当前在电脑D盘有两个sql脚本文件需要执行,一般人可能会想着直接将SQL里面的内容复制到plsqldeveloper中执行,当然这是种方法,但是对于十几个文件呢?个个复制未免太过繁琐且低效率。 D盘根目录下第个...
  • 如何将多个文件夹中的文件合并到个文件夹中 2011-11-27 这个算是小小的技巧吧!有两种方法,种是传统的命令行,另种是用搜索。 1.问:我下载了个书籍的压缩包,可是有许多文件夹,但每个文件夹只有...
  • 由于JD活动的JS脚本很且复杂,本次小编为大家介绍一QX一次性添加github仓库脚本的功能,这步操作可以使我们减去很复杂的步骤。下面开始今天的教程。欢迎大家入群交流:106511927 订阅仓库 具体步骤如下图。 大...
  • MySQL 8 复制)——异步复制

    千次阅读 多人点赞 2019-05-10 18:25:10
    目录 、MySQL异步复制介绍 1. 复制的用途 2. 复制如何工作 ... 简单说,复制就是将来自个MySQL数据库服务器(主库)的数据复制个或多个MySQL数据库服务器(从库)。传统的MySQL复制提供了...
  •  大家在日常Windows系统操作应用中,肯定会经常用到将多个文本文件合并成一个文件,想必大多数都是利用复制粘贴功能来完成这项工作的吧!下面我来告诉大家个巧法来完成这个功能哟!我是利用WinRAR压缩软件轻松...
  • word多个文档替换内容

    万次阅读 热门讨论 2018-09-05 14:51:57
    替换文件夹下所有文档的内容,需要替换的文档不能打开,采用宏进行批量替换,亲测成功,测试是word2016 根据简书作者改编https://www.jianshu.com/p/9d348b8015b6?utm_campaign=maleskine&amp;utm_content=note...
  • 分布式系统副本复制和一致

    千次阅读 2015-07-09 16:33:08
    复制可以提高系统的可靠显而易见,多个副本可以用于分流(如数据库的主多从结构)也可以用于加快响应时间(如cdn),这使得复制具有增强系统可用和扩展的效用。实现数据复制,不仅会涉及到副本的管理(包括...
  • 群里(Word学习交流群:180627193)一位朋友问到,如何一次性批量替换多个word文档中的同一内容。其实,实现多个Word文档的字符进行批量替换的方法有多种。(www.itblw.com)  第一种方法,可以利用第三方软件:...
  • 简介  在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这问题了。采用MySQL分布式集群,能够搭建一个高并发、...显然,主主复制从结构更难增强系统的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 498,409
精华内容 199,363
关键字:

一次性复制多个文件