当前位置: 首页 > news >正文

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靶场搭建

目录 配置环境&#xff1a; 1、将下载好的压缩包放置php的WWW根目录下 2、改文件配置 3、查看mysql用户名和密码&#xff0c;将其修改值靶场配置文件中 4、完成后我们就可以在浏览器输入127.0.0.1/dvwa进入靶场 测试XSS注入&#xff1a; 配置环境&#xff1a; githhub下…...

Uniapp笔记(二)uniapp语法1

一、本节项目预备知识 1、效果演示 2、常见组件 1、view组件 视图容器&#xff0c;它类似于传统html中的div&#xff0c;用于包裹各种元素内容。 2、swiper组件 swiper是滑动视图容器&#xff0c;经常看到的轮播图就是通过它来完成的 swiper-item是swiper子组件&#xf…...

【1day】PHPOK cms SQL注入学习

目录 一、漏洞描述 二、资产测绘 三、漏洞复现 四、漏洞修复 一、漏洞描述 PHPOK CMS是一个基于PHP语言开发的开源内容管理系统(CMS)。它提供了一个强大的平台,用于创建和管理网站内容。PHPOK CMS具有灵活的模块化架构,可以根据网站的需求进行定制和扩展。PHPOK CMS存…...

线程同步与互斥

目录 前言&#xff1a;基于多线程不安全并行抢票 一、线程互斥锁 mutex 1.1 加锁解锁处理多线程并发 1.2 如何看待锁 1.3 如何理解加锁解锁的本质 1.4 CRAII方格设计封装锁 前言&#xff1a;基于线程安全的不合理竞争资源 二、线程同步 1.1 线程同步处理抢票 1.2 如何…...

电子词典dictionary

一、项目要求&#xff1a; 1.登录注册功能&#xff0c;不能重复登录&#xff0c;重复注册。用户信息也存储在数据库中。 2.单词查询功能 3.历史记录功能&#xff0c;存储单词&#xff0c;意思&#xff0c;以及查询时间&#xff0c;存储在数据库 4.基于TCP&#xff0c;支持多客户…...

【python爬虫】10.指挥浏览器自动工作(selenium)

文章目录 前言selenium是什么怎么用设置浏览器引擎获取数据解析与提取数据自动操作浏览器 实操运用确认目标分析过程代码实现 本关总结 前言 上一关&#xff0c;我们认识了cookies和session。 分别学习了它们的用法&#xff0c;以及区别。 还做了一个项目&#xff1a;带着小…...

QT文件对话框,将标签内容保存至指定文件

一、主要步骤 首先&#xff0c;通过getSaveFileName过去想要保存的文件路径及文件名&#xff0c;其次&#xff0c;通过QFile类实例化一个文件对象&#xff0c;再读取文本框中的内容&#xff0c;最后将读取到的内容写入到文件中&#xff0c;最后关闭文件。 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篇&#xff08;数据定义&#xff09;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&#xff0c;需要split一下 对单列array类型的字段进行炸裂时&#xff0c;可以使用lateral view explode。 对多列array类型的字段进行炸裂时&#xff0c;可以使用lateral view posexplode。 1…...

QTday3(对话框、发布软件、事件处理核心机制)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.消息对话框&#xff08;QMessageBox&#xff09; ①基于属性版本的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是用来编写并行计算或分布式系统的高层次抽象&#xff08;类似java中的Thread&#xff09;让程序员不必为多线程模式下共享锁而烦恼。Actors将状态和行为封装在一个轻量的进程/线程中&#xff0c;但是不和其他Actors分享状态&#xff0c;…...

Java使用pdfbox将pdf转图片

前言 目前比较主流的两种转pdf的方式&#xff0c;就是pdfbox和icepdf&#xff0c;两种我都尝试了下&#xff0c;icepdf解析出来有时候会出现中文显示不出来&#xff0c;网上的解决方式又特别麻烦&#xff0c;不是安装字体&#xff0c;就是重写底层类&#xff0c;所以我选择了p…...

大规模场景下对Istio的性能优化

简介 当前istio下发xDS使用的是全量下发策略&#xff0c;也就是网格里的所有sidecar(envoy)&#xff0c;内存里都会有整个网格内所有的服务发现数据。这样的结果是&#xff0c;每个sidecar内存都会随着网格规模增长而增长。 Aeraki-mesh aeraki-mesh项目下有一个子项目专门用来…...

数字化新零售平台系统提供商,门店商品信息智慧管理-亿发进销存

传统的批发零售业务模式正面临着市场需求变化的冲击。用户日益注重个性化、便捷性和体验感&#xff0c;新兴的新零售模式迅速崛起&#xff0c;改变了传统的零售格局。如何在保持传统业务的基础上&#xff0c;变革发展&#xff0c;成为了业界亟需解决的问题。 在这一背景下&…...

postgresql-窗口函数

postgresql-窗口函数 简介窗口函数的定义分区选项&#xff08;PARTITION BY&#xff09;排序选项&#xff08;ORDER BY&#xff09;窗口选项&#xff08;frame_clause&#xff09; 聚合窗口函数排名窗口函数演示了 CUME_DIST 和 NTILE 函数 取值窗口函数 简介 常见的聚合函数&…...

Revit SDK 介绍:CreateAirHandler 创建户式风管机

前言 这个例子介绍如何通过 API 创建一个户式风管机族的内容&#xff0c;包含几何和接头。 内容 效果 核心逻辑 必须打开机械设备的族模板创建几何实体来表示风管机创建风机的接头 创建几何实体来表示风管机 例子中创建了多个拉伸&#xff0c;下面仅截取一段代码&#xff…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...