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 创建一个户式风管机族的内容,包含几何和接头。 内容 效果 核心逻辑 必须打开机械设备的族模板创建几何实体来表示风管机创建风机的接头 创建几何实体来表示风管机 例子中创建了多个拉伸,下面仅截取一段代码ÿ…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
