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);}}}}
}

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

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

相关文章

python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

简介 上一篇和大家一起科普扫盲接口后&#xff0c;知道什么是接口&#xff0c;接口类型等&#xff0c;对其有了大致了解之后&#xff0c;我们就回到主题-接口测试。 什么是接口测试 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各…

“算力+运力”扇动双翼,制造算力时代的蝴蝶效应

8月18日-20日&#xff0c;第二届中国算力大会在宁夏银川成功举办。 今年以来&#xff0c;随着大模型、AIGC等新技术的火爆&#xff0c;站在舞台中央的算力承载了无尽的期待&#xff0c;发展数字经济需要以算力基础设施为前提&#xff0c;社会各界已经形成了共识。 与此同时&…

无涯教程-Android - DatePicker函数

Android Date Picker允许您在自定义用户界面中选择由日,月和年组成的日期。为此功能,android提供了DatePicker和DatePickerDialog组件。 在本教程中,我们将通过DatePickerDialog演示日期选择器的用法, DatePickerDialog是一个包含DatePicker的简单对话框。 为了显示DatePicker…

Leetcode110. 平衡二叉树

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 题解&#xff…

【Go 基础篇】探索Go语言中的Map:数据的魔法盒子

嗨&#xff0c;各位Go语言的探索者们&#xff01;在我们的编程世界中&#xff0c;总会有一些特殊的工具能够让我们的生活变得更加便捷。而在Go语言中&#xff0c;Map就是这样一种神奇的数据结构。它就像是一个魔法盒子&#xff0c;可以帮助我们高效地存储和操作键值对数据。本文…

vue3中axios的使用方法

在Vue 3中使用axios发送HTTP请求的方法与Vue 2中基本相同。首先&#xff0c;需要安装axios库&#xff1a; npm install axios然后&#xff0c;在Vue组件中引入axios&#xff1a; import axios from axios;接下来&#xff0c;可以在Vue组件的方法中使用axios发送HTTP请求。例如…

算法通关村14关 | 数据流中位数问题

1. 数据流中位数问题 题目 LeetCode295: 中位数是有序列表中间的数&#xff0c;如果列表长度是偶数&#xff0c;中位数是中间两个数的平均值&#xff0c; 例如:[2,3,4]的中位数是3&#xff0c; [2,3]中位数是&#xff08;23&#xff09;/ 2 2.5 设计一个数据结构&#xff1a; …

2023.9.1 简单认识 JVM

目录 JVM 内存划分 本地方法栈 虚拟机栈 程序计数器 堆区 元数据区 JVM 类加载机制 加载 验证 准备 解析 初始化 类被加载的几种情况&#xff08;懒汉模式 ---> 只要被用到才会被加载&#xff09; 双亲委派模型 JVM 内存划分 JVM 是一个应用程序&#xff0c;在…

用ChatGPT做一个Chrome扩展 | 京东云技术团队

用ChatGPT做了个Chrome Extension 最近科技圈儿最火的话题莫过于ChatGPT了。 最近又发布了GPT-4&#xff0c;发布会上的Demo着实吸睛。 笔记本上手画个网页原型&#xff0c;直接生成网页。网友直呼&#xff1a;前端失业了&#xff01; 但我觉着啊&#xff0c;真就外行看热闹…

JVM之堆和方法区

目录 1.堆 1.1 堆的结构 1.1.1 新生代&#xff08;Young Generation&#xff09; 1.1.2 年老代&#xff08;Old Generation&#xff09; 1.1.3 永久代/元空间&#xff08;Permanent Generation/Metaspace&#xff09; 1.2 堆的内存溢出 1.3 堆内存诊断 1.3.1 jmap 1.3.2…

Three.js添加阴影和简单后期处理

在Three.js中&#xff0c;可以使用渲染器的一些特性来实现阴影和后期处理效果。 添加阴影 要在Three.js中添加阴影效果&#xff0c;需要做以下几个步骤&#xff1a; 1.开启阴影 首先&#xff0c;要在渲染器中开启阴影&#xff1a; renderer.shadowMap.enabled true;2.设置…

minio文件服务器开启https

一、准备证书 你要有https安全证书&#xff0c;我的是适用于nginx的证书 私钥 xxxx.key 公钥 xxxx.pem 二、上传证书到minio服务器 然后看看你的minio docker 有没有把 /root/.minio 挂载在主机上&#xff0c;如果有那么把两个证书文件放在/root/.minio/certs目录里面。…

STM32启动模式详解

文章目录 前置知识1. 单片机最小系统组成2. BOOT电路3. 三种启动模式4. 存储器映射 从主FLASH启动从系统存储区启动从SRAM启动 前置知识 1. 单片机最小系统组成 一个单片机最小系统由电源、晶振、下载电路、BOOT电路、和复位电路组成。少一个单片机都启动不了。 2. BOOT电路 …

Linux基础(三)

一.系统基本优化 关闭selinux:getenforce 查看selinux状态setenforce 0 临时关闭vim /etc/sysconfig/selinux 永久关闭SELINUXdisabled 关闭防火墙&#xff1a;systemctl stop firewalld 临时关闭防火墙systemctl disable firewalld 永久关闭防火墙sys…

几种反序列化漏洞

1.PHP魔术方法 <?php class c {private $name hacker;function __construct() { // 构造方法&#xff0c;new时调用echo construct<br>;}function __serialize() { // 序列化时调用echo serialize<br>;return [hack];}function __unserialize($data) { // 反…

LeetCode-1005-K次取反后最大化的数组和-贪心算法

题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数组 可能的最大和 。 …

多源最短路径算法:Floyd-Warshall算法分析

文章目录 图的邻接矩阵 一.Floyd-Warshall算法思想(基于动态规划)二.Floyd-Warshall算法接口笔记附录:单源最短路径--Bellman-Ford算法1.Bellman-Ford算法接口核心部分2.Bellman-Ford算法接口 图的邻接矩阵 namespace Graph_Structure {//Vertex是代表顶点的数据类型,Weight是…

python二级选择题必备

输出带有引号的字符串&#xff0c;可以使用转义字符\ 可以使用datatype()测试字符串的类型(没有datatype) 程序员可以调整的是异常(Exception)&#xff0c;开发者调整的是错误(Error) 序列类型是二维元素向量(一维)、元素之间存在先后关系&#xff0c;通过序号访问 Python的…

three.js(九):内置的路径合成几何体

路径合成几何体 TubeGeometry 管道LatheGeometry 车削ExtrudeGeometry 挤压 TubeGeometry 管道 TubeGeometry(path : Curve, tubularSegments : Integer, radius : Float, radialSegments : Integer, closed : Boolean) path — Curve - 一个由基类Curve继承而来的3D路径。 De…

【CSS】轮播图案例开发 ( 基本设置 | 子绝父相 | 浏览器水平居中 | 圆角设置 | 绝对定位居中设置 )

代码示例 : <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Banner 轮播</title><style>/* 取消浏览器或者其它标签的默认的内外边距 */* {margin: 0;padding: 0;}/* 取消列表样式 主要是…