Java工具类记录
HTML转word
相关依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.io.*;
import java.nio.charset.StandardCharsets;/***html转成word文档引入如下依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>*/
public class HtmlToWordUtils {public static void main(String[] args) throws Exception {String htmlFile = "D:\\2023\\code\\javaCode\\src\\main\\resources\\test.html";String wordFile = "D:\\2023\\code\\javaCode\\src\\main\\java\\test\\htmlToWord\\abc.doc";htmlToDocToLocal(readFileContent(htmlFile), wordFile);}/*** @param richText 富文本内容* @param localFilePath 输出文件地址* @throws Exception*/public static void htmlToDocToLocal(String richText, String localFilePath) throws Exception {// 设置编码byte[] bytes = richText.getBytes("UTF-8");try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);){POIFSFileSystem poifs = new POIFSFileSystem();// ##############下面这两个不能删掉DirectoryEntry directory = poifs.getRoot();DocumentEntry documentEntry = directory.createDocument("WordDocument", bais);// ################这两个不能删掉// 输出到本地文件try (OutputStream ostream = new FileOutputStream(localFilePath);){poifs.writeFilesystem(ostream);}}}// 读取文件内容public static String readFileContent(String filePath) throws Exception {StringBuilder sb = new StringBuilder();try (FileInputStream fis = new FileInputStream(filePath)) {byte[] buffer = new byte[1024];int readBytes;while ((readBytes = fis.read(buffer)) != -1) {sb.append(new String(buffer, 0, readBytes, StandardCharsets.UTF_8));}}return sb.toString();}
}
解析HTML文件
相关依赖
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.14.2</version>
</dependency>
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ParseHtml {public static void main(String[] args) {String html = getHtml();Document document = Jsoup.parse(html);// 获取所有的img标签Elements imgs = document.getElementsByTag("img");for (Element img : imgs) {// 拿到src属性值String src = img.attr("src");System.out.println(src);// 修改src属性值img.attr("src", "xxxxxx");}System.out.println(document.html());}private static String getHtml() {return "<!DOCTYPE html>\n" +"<html>\n" +"<head> \n" +"<meta charset=\"utf-8\"> \n" +"<title>菜鸟教程(runoob.com)</title> \n" +"</head>\n" +"<body>\n" +"<h2>Norwegian Mountain Trip</h2>\n" +"<img border=\"0\" src=\"/images/pulpit.jpg\" alt=\"Pulpit rock\" width=\"304\" height=\"228\">\n" +"</body>\n" +"</html>";}
}
压缩文件
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ZipFileUtils {public static void main(String[] args) throws Exception {// 压缩后的文件String zipFile = "D:\\lzc\\example.zip";// 需要压缩的文件夹String folderToCompress = "D:\\lzc\\ab";compress(zipFile, folderToCompress, true);}/*** @param zipFile 压缩包名称* @param folderName 压缩文件夹* @param recursive 是否需要递归压缩*/public static void compress(String zipFile, String folderName, boolean recursive) throws IOException {try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile))) {if (recursive) {// 需要递归压缩文件夹下所有的文件+目录compressFolder(folderName, folderName, zipOutputStream);} else {// 只压缩当前文件夹的文件compressCurrentFolder(folderName, zipOutputStream);}}}/*** 只压缩当前文件夹下的文件* @param folderName* @param zipOutputStream* @throws IOException*/public static void compressCurrentFolder(String folderName, ZipOutputStream zipOutputStream) throws IOException {File folder = new File(folderName);File[] files = folder.listFiles();if (files == null) {return;}for (File file : files) {if (file.isDirectory()) {continue;}addToZipFile(file.getName(), file.getAbsolutePath(), zipOutputStream);}}/*** 递归遍历所有的文件并打包* @param sourceFolder 要压缩的文件夹* @param folderName 需要递归的文件夹* @param zipOutputStream 压缩文件* @throws IOException*/public static void compressFolder(String sourceFolder, String folderName, ZipOutputStream zipOutputStream) throws IOException {File folder = new File(folderName);File[] files = folder.listFiles();if (files == null) {return;}for (File file : files) {if (file.isDirectory()) {// 压缩子文件夹compressFolder(sourceFolder, file.getAbsolutePath(), zipOutputStream);} else {// 压缩文件String absolutePath = file.getAbsolutePath();addToZipFile(absolutePath.replace(sourceFolder,""), absolutePath, zipOutputStream);}}}/*** 将文件添加到压缩包中* @param fileName* @param fileAbsolutePath* @param zipOutputStream* @throws IOException*/public static void addToZipFile(String fileName, String fileAbsolutePath, ZipOutputStream zipOutputStream) throws IOException {// 创建ZipEntry对象并设置文件名ZipEntry entry = new ZipEntry(fileName);zipOutputStream.putNextEntry(entry);// 读取文件内容并写入Zip文件try (FileInputStream fileInputStream = new FileInputStream(fileAbsolutePath)) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fileInputStream.read(buffer)) != -1) {zipOutputStream.write(buffer, 0, bytesRead);}}// 完成当前文件的压缩zipOutputStream.closeEntry();}
}
图片工具类
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.Base64;public class ImageUtils {/*** 将本地文件转换成HTML中img标签能识别的src* @param filePath 图片地址* @return* @throws IOException*/public static String localImageToHtmlImgBase64(String filePath) throws IOException {File file = new File(filePath);String fileName = file.getName();String imageType = fileName.substring(fileName.lastIndexOf(".") + 1);return "data:image/" + imageType + ";base64," + localFileToBase64(filePath);}/*** 将本地文件转换成base64* @param filePath 文件地址* @return*/public static String localFileToBase64(String filePath) throws IOException {try (InputStream inputStream = new FileInputStream(filePath)){int available = inputStream.available();byte[] bytes = new byte[available];inputStream.read(bytes);return Base64.getEncoder().encodeToString(bytes);}}/*** 将图片下载到本地* @param imageUrl* @param localFilePath* @throws IOException*/public static void imageUrlToLocalFile(String imageUrl, String localFilePath) throws IOException {// 打开连接URL url = new URL(imageUrl);URLConnection connection = url.openConnection();// 设置请求超时为5秒connection.setConnectTimeout(5 * 1000);// 读取数据流并保存到本地try (InputStream input = connection.getInputStream()){byte[] data = new byte[1024];int len;try (FileOutputStream output = new FileOutputStream(localFilePath)){while ((len = input.read(data)) != -1) {output.write(data, 0, len);}}}}
}
相关文章:
Java工具类记录
HTML转word 相关依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi…...
DVWA靶场搭建
目录 配置环境: 1、将下载好的压缩包放置php的WWW根目录下 2、改文件配置 3、查看mysql用户名和密码,将其修改值靶场配置文件中 4、完成后我们就可以在浏览器输入127.0.0.1/dvwa进入靶场 测试XSS注入: 配置环境: githhub下…...
Uniapp笔记(二)uniapp语法1
一、本节项目预备知识 1、效果演示 2、常见组件 1、view组件 视图容器,它类似于传统html中的div,用于包裹各种元素内容。 2、swiper组件 swiper是滑动视图容器,经常看到的轮播图就是通过它来完成的 swiper-item是swiper子组件…...
【1day】PHPOK cms SQL注入学习
目录 一、漏洞描述 二、资产测绘 三、漏洞复现 四、漏洞修复 一、漏洞描述 PHPOK CMS是一个基于PHP语言开发的开源内容管理系统(CMS)。它提供了一个强大的平台,用于创建和管理网站内容。PHPOK CMS具有灵活的模块化架构,可以根据网站的需求进行定制和扩展。PHPOK CMS存…...
线程同步与互斥
目录 前言:基于多线程不安全并行抢票 一、线程互斥锁 mutex 1.1 加锁解锁处理多线程并发 1.2 如何看待锁 1.3 如何理解加锁解锁的本质 1.4 CRAII方格设计封装锁 前言:基于线程安全的不合理竞争资源 二、线程同步 1.1 线程同步处理抢票 1.2 如何…...
电子词典dictionary
一、项目要求: 1.登录注册功能,不能重复登录,重复注册。用户信息也存储在数据库中。 2.单词查询功能 3.历史记录功能,存储单词,意思,以及查询时间,存储在数据库 4.基于TCP,支持多客户…...
【python爬虫】10.指挥浏览器自动工作(selenium)
文章目录 前言selenium是什么怎么用设置浏览器引擎获取数据解析与提取数据自动操作浏览器 实操运用确认目标分析过程代码实现 本关总结 前言 上一关,我们认识了cookies和session。 分别学习了它们的用法,以及区别。 还做了一个项目:带着小…...
QT文件对话框,将标签内容保存至指定文件
一、主要步骤 首先,通过getSaveFileName过去想要保存的文件路径及文件名,其次,通过QFile类实例化一个文件对象,再读取文本框中的内容,最后将读取到的内容写入到文件中,最后关闭文件。 1.txt即为完成上述操作…...
C#,《小白学程序》第十一课:阶乘(Factorial)的计算方法与代码
1 文本格式 /// <summary> /// 阶乘的非递归算法 /// </summary> /// <param name"a"></param> /// <returns></returns> private int Factorial_Original(int a) { int r 1; for (int i a; i > 1; i--) { …...
MySQL 数据库常用命令大全(完整版)
文章目录 1. MySQL命令2. MySQL基础命令3. MySQL命令简介4. MySQL常用命令4.1 MySQL准备篇4.1.1 启动和停止MySQL服务4.1.2 修改MySQL账户密码4.1.3 MySQL的登陆和退出4.1.4 查看MySQL版本 4.2 DDL篇(数据定义)4.2.1 查询数据库4.2.2 创建数据库4.2.3 使…...
【数学】【书籍阅读笔记】【概率论】应用随机过程概率论模型导论 by Sheldon M.Ross 第一章 概率论引总结与习题题解 【更新中】
文章目录 前言1 第一章 概率论引论 总结1.1 样本空间与事件1.2 定义在事件上的概率1.3 条件概率1.4 独立事件 2 一些有用的重要结论/公式/例题3 重要例题例 1.11 3 习题题解题1题2 4 习题总结 前言 1 第一章 概率论引论 总结 第一章从事件的角度引出样本空间、事件、概率的基本…...
posexplode函数实战总结
目录 1、建表和准备数据 2、炸裂实践 3、错误炸裂方式 4、当字段类型为string,需要split一下 对单列array类型的字段进行炸裂时,可以使用lateral view explode。 对多列array类型的字段进行炸裂时,可以使用lateral view posexplode。 1…...
QTday3(对话框、发布软件、事件处理核心机制)
一、Xmind整理: 二、上课笔记整理: 1.消息对话框(QMessageBox) ①基于属性版本的API QMessageBox::QMessageBox( //有参构造函数名QMessageBox::Icon icon, //图标const Q…...
el-date-picker限制选择的时间范围
<el-date-pickersize"mini"v-model"dateTime"value-format"yyyy-MM-dd HH:mm:ss"type"datetimerange"range-separator"~"start-placeholder"开始日期"end-placeholder"结束日期":picker-options&quo…...
Scala中的Actor模型
Scala中的Actor模型 概念 Actor Model是用来编写并行计算或分布式系统的高层次抽象(类似java中的Thread)让程序员不必为多线程模式下共享锁而烦恼。Actors将状态和行为封装在一个轻量的进程/线程中,但是不和其他Actors分享状态,…...
Java使用pdfbox将pdf转图片
前言 目前比较主流的两种转pdf的方式,就是pdfbox和icepdf,两种我都尝试了下,icepdf解析出来有时候会出现中文显示不出来,网上的解决方式又特别麻烦,不是安装字体,就是重写底层类,所以我选择了p…...
大规模场景下对Istio的性能优化
简介 当前istio下发xDS使用的是全量下发策略,也就是网格里的所有sidecar(envoy),内存里都会有整个网格内所有的服务发现数据。这样的结果是,每个sidecar内存都会随着网格规模增长而增长。 Aeraki-mesh aeraki-mesh项目下有一个子项目专门用来…...
数字化新零售平台系统提供商,门店商品信息智慧管理-亿发进销存
传统的批发零售业务模式正面临着市场需求变化的冲击。用户日益注重个性化、便捷性和体验感,新兴的新零售模式迅速崛起,改变了传统的零售格局。如何在保持传统业务的基础上,变革发展,成为了业界亟需解决的问题。 在这一背景下&…...
postgresql-窗口函数
postgresql-窗口函数 简介窗口函数的定义分区选项(PARTITION BY)排序选项(ORDER BY)窗口选项(frame_clause) 聚合窗口函数排名窗口函数演示了 CUME_DIST 和 NTILE 函数 取值窗口函数 简介 常见的聚合函数&…...
Revit SDK 介绍:CreateAirHandler 创建户式风管机
前言 这个例子介绍如何通过 API 创建一个户式风管机族的内容,包含几何和接头。 内容 效果 核心逻辑 必须打开机械设备的族模板创建几何实体来表示风管机创建风机的接头 创建几何实体来表示风管机 例子中创建了多个拉伸,下面仅截取一段代码ÿ…...
酷安UWP桌面客户端:在Windows电脑上高效刷酷安的完整指南
酷安UWP桌面客户端:在Windows电脑上高效刷酷安的完整指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 还在为手机小屏幕刷酷安而感到眼睛酸痛吗?想在27寸大屏幕…...
避坑指南:ESP32驱动SD卡给LVGL用,我踩过的那些‘焊盘’和‘代码坑’
ESP32驱动SD卡与LVGL整合实战:从硬件焊接到软件调试的完整避坑手册 第一次将ESP32、SD卡和LVGL整合到同一个项目中时,我天真地以为这不过是简单的模块拼接。直到电路板上的焊锡冷却,代码编译通过却无法运行时,才意识到自己正踏入…...
XXMI启动器:6款热门二次元游戏模组一站式管理终极指南
XXMI启动器:6款热门二次元游戏模组一站式管理终极指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher XXMI启动器是一款专为二次元游戏爱好者设计的开源模组管理平台…...
Cat-Catch浏览器资源嗅探扩展深度解析:高性能流媒体捕获架构揭秘
Cat-Catch浏览器资源嗅探扩展深度解析:高性能流媒体捕获架构揭秘 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch Cat-Catch作为一款专业…...
告别臃肿PDF!用Ghostscript命令行批量压缩/拆分/合并的保姆级教程
Ghostscript实战指南:PDF批量处理的高效命令行艺术 每次面对动辄上百兆的扫描版PDF报告时,你是否也经历过邮箱附件发送失败、云盘上传卡在99%的崩溃瞬间?当领导临时要求合并二十份季度报表,或是学术期刊需要按章节拆分投稿时&…...
c#软件开发学习笔记--数据类型
c#软件开发学习笔记 一、 数据类型1.基本类型(值类型) 值类型存储在栈中,变量保存的值的本身,赋值是拷贝一份新数据 byte(字节) bit(位) 1byte 8bit byte(1字节) byte b 10; //0 - 255short(2字节) short s 100;…...
Taotoken多模型聚合在批量内容生成任务中的稳定性观察
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken多模型聚合在批量内容生成任务中的稳定性观察 1. 任务背景与挑战 在涉及大规模、长时间运行的内容生成任务中,…...
用Arduino Nano和MPU6050做个‘防抖云台’:PID调参实战,告别手抖视频
用Arduino Nano和MPU6050打造防抖云台:从硬件搭建到PID调参全指南 在短视频和Vlog盛行的时代,稳定的画面已经成为内容创作者的刚需。专业级稳定器动辄上千元的价格让许多入门玩家望而却步。其实,只需一块Arduino Nano开发板、一个MPU6050传感…...
从COCO到自定义:用Labelme为YOLOv8-Pose制作关键点数据集的完整避坑指南
从COCO到自定义:用Labelme为YOLOv8-Pose制作关键点数据集的完整避坑指南 在计算机视觉领域,关键点检测技术正逐渐成为工业界和学术界的热点研究方向。不同于传统的目标检测任务,关键点检测不仅需要定位物体位置,还要精确识别物体内…...
OmenSuperHub终极指南:3步解锁暗影精灵完整性能潜力
OmenSuperHub终极指南:3步解锁暗影精灵完整性能潜力 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 想要彻底掌控惠普暗影精灵笔记本的性能吗&…...
