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 创建一个户式风管机族的内容,包含几何和接头。 内容 效果 核心逻辑 必须打开机械设备的族模板创建几何实体来表示风管机创建风机的接头 创建几何实体来表示风管机 例子中创建了多个拉伸,下面仅截取一段代码ÿ…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
