wordpress小图标网站/做网站哪家好

wordpress小图标网站,做网站哪家好,国务院建设行政主管部门网站,园林景观设计公司纳税义务的发生时间的确定目录 一、前言 二、代码示例 新建FileModel.java 实体 Main.java 代码: 三、展示效果 四、最后 一、前言 今天给大家分享一个J自己写的ava实战的小案例,主要功能是实现指定一个文件夹,然后分组压缩里面的文件。其实这个案例还是有一定用…

目录

一、前言

二、代码示例

新建FileModel.java 实体

Main.java 代码:

三、展示效果

四、最后


一、前言

今天给大家分享一个J自己写的ava实战的小案例,主要功能是实现指定一个文件夹,然后分组压缩里面的文件。其实这个案例还是有一定用途的,比如日志文件夹里面有几千个文件,如果我需要给每个压缩包指定10M,把整个文件夹里面的日志文件都进行压缩,这个案例就能够用得上了。

废话少说,直接上代码。我这边采用的是最基本的控制台程序,主要还是代码的逻辑有一定的借鉴意义。欢迎大家互相交流学习,如有不妥之处,欢迎指正!

说明:暂时未考虑文件夹里面还有文件夹的情况。

二、代码示例

  1. 新建FileModel.java 实体

主要指定文件名以及文件大小,方便按照大小分组的时候使用。

public class FileModel {public FileModel(String name, double fileSize) {this.name = name;this.fileSize = fileSize;}// 文件名public String name;// 文件大小KBpublic double fileSize;public String getName() {return name;}public void setName(String name) {this.name = name;}public double getFileSize() {return fileSize;}public void setFileSize(double fileSize) {this.fileSize = fileSize;}
}

  1. Main.java 代码:

文件夹中文件分组大小采用了递归的方式。

为了实现效果代码都放在了Main.java里面。

具体代码都有注释,直接看注释就行。

 private static final double FILE_SIZE=5500; // 指定分组压缩的大小 550KBprivate static final String PATH="D:\\Test; // 指定要处理的文件夹public static void main(String[] args) {List<FileModel> list = getFiles(PATH);HashMap<Double, List<FileModel>> map = new HashMap<>();getArr(list,FILE_SIZE,map);if(map.size()>0){for (Double aDouble : map.keySet()) {List<FileModel> fileModels = map.get(aDouble);batchZipFiles(fileModels,PATH+"\\"+aDouble.toString()+".zip");}}System.out.println(map);}// 递归方式实现文件分组private static void getArr(List<FileModel> list, double fileSize,Map<Double, List<FileModel>> map) {List<FileModel> listAdd = new ArrayList<>();if (list.size() > 0) {for (FileModel fileModel : list) {if (listAdd.size() == 0) {
                    listAdd.add(fileModel);} else {if (listAdd.stream().mapToDouble(FileModel::getFileSize).sum() < fileSize) {
                        listAdd.add(fileModel);if(listAdd.size()==list.size()){
                            map.put(listAdd.stream().mapToDouble(FileModel::getFileSize).sum(), listAdd);}} else {// 取差集
                        list = list.stream().filter(item -> !listAdd.contains(item)).collect(Collectors.toList());
                        map.put(listAdd.stream().mapToDouble(FileModel::getFileSize).sum(), listAdd);getArr(list,fileSize,map);break;}}}}}//读取文件夹获取里面文件的名字尺寸 不考虑嵌套文件夹private static List<FileModel> getFiles(String path) {List<FileModel> files = new ArrayList<FileModel>();File file = new File(path);File[] tempList = file.listFiles();if (tempList != null && tempList.length > 0) {for (File value : tempList) {if (value.isFile()) {// System.out.println(value.getName() + ":" + getFileSizeString(value.length()));
                    files.add(new FileModel(
                            value.getName(), getFileSizeKB(value.length())));}}}return files;}// 获取文件大小KBprivate static double getFileSizeKB(Long size) {double length = Double.parseDouble(String.valueOf(size));return  length / 1024.0;}// 返回文件大小尺寸private static String getFileSizeString(Long size) {double length = Double.parseDouble(String.valueOf(size));//如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义if (length < 1024) {return length + "B";} else {
            length = length / 1024.0;}//如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位//因为还没有到达要使用另一个单位的时候//接下去以此类推if (length < 1024) {return Math.round(length * 100) / 100.0 + "KB";} else {
            length = length / 1024.0;}if (length < 1024) {//因为如果以MB为单位的话,要保留最后1位小数,//因此,把此数乘以100之后再取余return Math.round(length * 100) / 100.0 + "MB";} else {//否则如果要以GB为单位的,先除于1024再作同样的处理return Math.round(length / 1024 * 100) / 100.0 + "GB";}}/**
     *  压缩指定文件夹中的所有文件,生成指定名称的zip压缩包
     *
     * @param list 需要压缩的文件名称列表(包含相对路径)
     * @param zipOutPath 压缩后的文件名称
     **/public static void batchZipFiles(List<FileModel> list, String zipOutPath) {ZipOutputStream zipOutputStream = null;WritableByteChannel writableByteChannel = null;MappedByteBuffer mappedByteBuffer = null;try {
            zipOutputStream = new ZipOutputStream(new FileOutputStream(zipOutPath));
            writableByteChannel = Channels.newChannel(zipOutputStream);File file = new File(PATH);File[] tempList = file.listFiles();List<String> fileList = list.stream().map(FileModel::getName).collect(Collectors.toList());File[] addList=new File[fileList.size()];assert tempList != null;for (File file1 : tempList) {if(fileList.contains(file1.getName())){long fileSize = file1.length();//利用putNextEntry来把文件写入
                    zipOutputStream.putNextEntry(new ZipEntry(file1.getName()));long read = Integer.MAX_VALUE;int count = (int) Math.ceil((double) fileSize / read);long pre = 0;//由于一次映射的文件大小不能超过2GB,所以分次映射for (int i = 0; i < count; i++) {if (fileSize - pre < Integer.MAX_VALUE) {
                            read = fileSize - pre;}
                        mappedByteBuffer = new RandomAccessFile(file1, "r").getChannel().map(FileChannel.MapMode.READ_ONLY, pre, read);
                        writableByteChannel.write(mappedByteBuffer);
                        pre += read;}}}assert mappedByteBuffer != null;
            mappedByteBuffer.clear();} catch (Exception e) {} finally {try {if (null != zipOutputStream) {
                    zipOutputStream.close();}if (null != writableByteChannel) {
                    writableByteChannel.close();}if (null != mappedByteBuffer) {
                    mappedByteBuffer.clear();}} catch (Exception e) {}}}

三、展示效果

最终运行效果如下

四、最后

本案例实现了指定分组大小压缩的功能,仅供参考学习交流,欢迎大神指正,提出更好的算法。高手勿喷!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac系统快捷键大全详细介绍

对于使用苹果电脑的操作系统的新人来说&#xff0c;快捷键是个很麻烦的问题&#xff0c;要一个个的找到快捷键也不是很容易的问题&#xff0c;今天这篇文章就解决了到处找快捷键的麻烦。 Mac中主要有四个修饰键&#xff0c;分别是Command&#xff0c;Control&#xff0c;Optio…

Docker实战:Docker安装nginx并配置SSL

目录 1、拉取nginx镜像 2、启动nginx容器 3、创建挂载nginx目录 4、重新启动nginx容器 5、查看目录挂载是否成功 6、在宿主目录创建ssl目录&#xff0c;将ssl证书放在宿主主机 7、修改配置宿主主机nginx增加ssl证书配置 8、重启nginx容器 今天继续给大家分享Docker实战…

W模型和瀑布模型与“V”模式开发模型有何异同?

在做软件开发时&#xff0c;程序员们肯定接触过各式各样的软件开发模型&#xff0c;例如&#xff1a;写了再改模型、瀑布模型、增量模型等。其实&#xff0c;很多开发模型是在瀑布模型基础上衍生出来的。 然而&#xff0c;了解“V”模式开发模型的程序员应该不多。“V”模式开…

语言模型(N-Gram)

问题描述&#xff1a;由于公司业务产品中&#xff0c;需要用户自己填写公司名称&#xff0c;而这个公司名称存在大量的乱填现象&#xff0c;因此需要对其做一些归一化的问题。在这基础上&#xff0c;能延伸出一个预测用户填写的公司名是否有效的模型出来。 目标&#xff1a;问题…

C#:Winfrom 实现DataGridView 自定义分页

目录 安装Dapper依赖 安装SQLite依赖 新建SQLite数据库文件 主要代码示例 运行界面 今天给大家分享Winform实现DataGridView 自定义分页的案例&#xff0c;感兴趣的朋友可以一起来学习一下。 采用技术&#xff1a;C#WinformDapperSQLite。 本次为了避免安装数据库的繁琐&#x…

超维空间S2无人机使用说明书——21、VINS视觉定位仿真

引言&#xff1a;为了实现室内无人机的定位功能&#xff0c;S系列无人机配置了VINS-FUSION定位环境&#xff0c;主要包含了仿真跑数据集和实际操作部分。为了提前熟悉使用原理&#xff0c;可以先使用仿真环境跑数据集进行学习和理解 硬件&#xff1a;1080P显示器、Jetson orin…

正割函数(sec)

1. 定义 正割与余弦互为倒数&#xff0c;余割与正弦互为倒数。即&#xff1a; ⎧⎩⎨⎪⎪⎪⎪secθ1cosθcscθ1sinθ也即在几何上&#xff0c;设 △ABC&#xff0c;∠C90&#xff0c;ACb&#xff0c;BCa&#xff0c;ABc&#xff0c;正割函数&#xff1a;sec∠Ac/b&#xff08;…

网站:推荐几款好用的在线短链生成工具

目录 一、网站工具&#xff1a;ft12 二、网站工具&#xff1a;缩我短网址 三、Sina新浪短网址 四、短网址在线生成- ock.cn 五、网站工具&#xff1a;i排版 短链技术目前对网站推广非常的有用&#xff0c;有了它就可以把非常长的网址缩短。这样分享推广起来非常方便。今天…

学习mysql中使用inner join,left join 等

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下&#xff1a; -----------------------------------------…

MySQL:union all与union区别详解

union 是对数据进行并集操作&#xff0c;不包括重复行&#xff0c;同时进行默认排序 Union all 是对数据进行并集操作&#xff0c;包括重复行&#xff0c;不进行排序 举例说明&#xff1a; 创建数据库表&#xff1a; CREATE TABLE t_demo ( id int(32) NOT NULL, name var…

如何理解Mysql的索引及他们的原理--------二叉查找树和平衡二叉树和B树和B+树

1.索引是什么东西&#xff1f; 索引就是一个数据结构&#xff0c;我们把表中的记录用一个适合高效查找的数据结构来表示&#xff0c;目的就是让查询变得更高效。 2.它到底怎么运作的&#xff1f; 这个问题就说来话长了&#xff0c;且听我慢慢道来&#xff1a; 在mysql中使用…

微信输入法来了,一起来体验一下吧

大家期待已久的微信输入法终于来了&#xff0c;不是内置于微信当中&#xff0c;而是一款独立应用的APP&#xff0c;今天小编带大家来体验一下微信输入&#xff0c;到底好不好用&#xff1f; 目录 1、安装 2、功能介绍 2.1、智能推荐公众号、视频号、小程序等 2.2、可直接发…

猿创征文 | Docker实战:Linux环境安装Tomcat安装步骤

目录 1.官网镜像版本查找 2、拉取tomcat镜像 3. 查看镜像是否下载成功

Zabbix的安装(源码安装)

zabbix3.0完全安装 安装zabbix首先需要安装ltmp&#xff08;lnmp&#xff09;&#xff0c;这里的t是指tengine&#xff08;taobao的nginx版本&#xff09;&#xff0c;安装教程见 http://www.ltmp.cc 安装的时候PHP选择5.4版本&#xff0c;因为zabbix3.0需要php5.4以上版本。 安…

WCF 服务端+客户端动态调用

最近在写WCF服务相关代码&#xff0c;把项目中用到的通讯框架做了下整理&#xff0c;以备以后自己记忆。 WCF服务端&#xff1a; 包含契约定义&#xff1a;WCF.Contract、契约实现&#xff1a;WCF.Service 以及宿主主程序&#xff1a;WcfServerHost 本DEMO 为了为了演示&#x…