java关于如何实现读取各种类型的文件核心属性方法,比如获取标题和作者、主题等;附带远程的https的地址文件读取方法;

有两种方法:
通过提供的现成api进行调用读取pdf文件,或doc、xlsx、pptx文件;可能商业需要付费
https://www.e-iceblue.cn/pdf_java_document_operation/set-pdf-document-properties-in-java.html
Spire.PDF for Java
在这里插入图片描述

import com.spire.pdf.*;
import java.io.*;public class getPDFProperties {public static void main(String[] args) throws IOException {//创建 PdfDocument 类的对象PdfDocument pdf = new PdfDocument();//从磁盘加载PDF文档pdf.loadFromFile("" + "setPDFProperties.pdf");//创建 StringBuilder 的对象以储存获取的属性数据StringBuilder stringBuilder = new StringBuilder();//获取PDF文档的属性数据并储存于创建的 StringBuilderstringBuilder.append("标题:" + pdf.getDocumentInformation().getTitle() + "\r\n");stringBuilder.append("作者" + pdf.getDocumentInformation().getAuthor() + "\r\n");stringBuilder.append("主题:" + pdf.getDocumentInformation().getSubject() + "\r\n");stringBuilder.append("关键词:" + pdf.getDocumentInformation().getKeywords() + "\r\n");stringBuilder.append("创建者:" + pdf.getDocumentInformation().getCreator() + "\r\n");stringBuilder.append("创建时间:" + pdf.getDocumentInformation().getCreationDate() + "\r\n");stringBuilder.append("制作工具:" + pdf.getDocumentInformation().getProducer() + "\r\n");//创建一个TXT文件File file = new File("getPDFProperties.txt");file.createNewFile();//将 StringBuilder 写入TXT文件FileWriter fileWriter = new FileWriter(file, true);BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);bufferedWriter.write(stringBuilder.toString());bufferedWriter.flush();}
}

第二种方法:
通过Apache POI进行读取实现;另外不同版本 方法实现也会有所不同;
Apache POI 的不同版本

引入依赖

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version> <!-- 请检查最新版本 --></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version> <!-- 检查是否有更新的版本 --></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.17.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version> <!-- 请检查最新版本 --><exclusions><exclusion><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId></exclusion></exclusions></dependency>

最后直接提供方法实现:

package com.ruoyi.project.backstage.pdf;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.poi.ooxml.POIXMLDocument;
import org.apache.poi.ooxml.POIXMLProperties;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
import org.apache.xmlbeans.impl.values.XmlComplexContentImpl;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;/*** @className: FileUtils* @author: 3.0* @date: 2024/10/16* @Version: 1.0* @description:*/public class FileUtils {//    public static void main(String[] args) {
//        try (PDDocument document = PDDocument.load(new File("E:\\project\\" + "1.pdf"))) {
//            PDDocumentInformation info = document.getDocumentInformation();
//            System.out.println("Title: " + info.getTitle());
//            System.out.println("Author: " + info.getAuthor());
//            System.out.println("Subject: " + info.getSubject());
//            // 其他属性...
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//    }//    public static void main(String[] args) throws Exception {
//        XWPFDocument doc = new XWPFDocument(new FileInputStream(new File("E:\\project\\log.sh用法(1).docx")));
        CTProperties coreProps = doc.getProperties().getCoreProperties();
//        POIXMLProperties.CoreProperties coreProps = doc.getProperties().getCoreProperties();
//        System.out.println("Title: " + coreProps.getTitle());
//        System.out.println("Author: " + coreProps.getCreator());
//        System.out.println("主题: " + coreProps.getSubject());
//        // 更多属性...
//        doc.close();
//    }public static void main(String[] args) throws Exception {Workbook workbook = WorkbookFactory.create(new FileInputStream(new File("E:\\project\\工作簿1 - 副本.xls")));if (workbook instanceof POIXMLDocument) {POIXMLDocument poixmlDocument = (POIXMLDocument) workbook;POIXMLProperties properties = poixmlDocument.getProperties();POIXMLProperties.CoreProperties coreProperties = properties.getCoreProperties();// 现在你可以访问核心属性了String title = coreProperties.getTitle();String subject = coreProperties.getSubject();String creator = coreProperties.getCreator();// ... 其他属性// 打印属性到控制台System.out.println("Title: " + title);System.out.println("Subject: " + subject);System.out.println("Creator: " + creator);// ...} else {System.out.println("The workbook is not a POIXMLDocument (not an .xlsx file?).");}// 关闭工作簿(在try-with-resources中自动关闭fis,但这里显式关闭workbook以强调)workbook.close();}
//
//    public static void main(String[] args) throws Exception {
//        XMLSlideShow ppt = new XMLSlideShow(OPCPackage.open(new FileInputStream(new File("E:\\project\\演示文稿1.pptx"))));
//        System.out.println("Title: " + ppt.getProperties().getCoreProperties().getTitle());
//        System.out.println("Author: " + ppt.getProperties().getCoreProperties().getCreator());
//        System.out.println("主题: " + ppt.getProperties().getCoreProperties().getSubject());
//        // 更多属性...
//        ppt.close();
//    }}

如果有需要读取https地址的需求;可以实现下面的:
从远程 HTTPS URL 读取文件并将其转换为 FileInputStream 对象,你可以先将远程文件下载到本地磁盘,然后再使用 FileInputStream 打开它。以下是实现这一过程的一种方法:

下载文件到本地:
1、使用 Java 的 HttpURLConnection 或者 HttpClient 等工具来下载文件。
2、创建 FileInputStream:使用下载后的本地文件路径创建 FileInputStream。

public static void main(String[] args) throws Exception {String remoteUrl = "http://s3.api.com/diaoyun//survey/answer/.xlsx";String localPath = "E:\\project\\file11.xlsx"; // 本地临时文件路径downloadFileFromURL(remoteUrl, localPath);File file = new File(localPath);FileInputStream fileInputStream = new FileInputStream(file);Workbook workbook = WorkbookFactory.create(fileInputStream);
//        Workbook workbook = WorkbookFactory.create(new FileInputStream(new File("E:\\project\\工作簿1 - 副本.xls")));if (workbook instanceof POIXMLDocument) {POIXMLDocument poixmlDocument = (POIXMLDocument) workbook;POIXMLProperties properties = poixmlDocument.getProperties();POIXMLProperties.CoreProperties coreProperties = properties.getCoreProperties();// 现在你可以访问核心属性了String title = coreProperties.getTitle();String subject = coreProperties.getSubject();String creator = coreProperties.getCreator();// ... 其他属性// 打印属性到控制台System.out.println("Title: " + title);System.out.println("Subject: " + subject);System.out.println("Creator: " + creator);// ...} else {System.out.println("The workbook is not a POIXMLDocument (not an .xlsx file?).");}// 关闭工作簿(在try-with-resources中自动关闭fis,但这里显式关闭workbook以强调)workbook.close();file.delete();}private static void downloadFileFromURL(String urlStr, String localPath) throws IOException {URL url = new URL(urlStr);HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();try (InputStream in = urlConnection.getInputStream();FileOutputStream out = new FileOutputStream(localPath)) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = in.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}}}

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

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

相关文章

【初识数据库】

目录 一、数据库简介 1.什么是数据库 2.数据库与数据结构有啥关系 3.为什么要使用数据库 二、数据库服务器、数据库和表的关系 三、客户端与服务器的通讯方式 1.C/S架构 2.B/S架构 3.命令提示符 4.MySQL架构 一、数据库简介 1.什么是数据库 组织和保存数据的应用程序…

大模型入门到精通!大模型应用开发极简入门(含PDF)

大模型的出现正悄然改变人们的生活与工作方式&#xff0c;比如ChatGPT-4、文心一言、通义千问等语言大模型。它们已帮助很多办公室“白领”们在解决日常工作问题&#xff0c;如制定计划、撰写实施方案&#xff0c;甚至制作美化PPT等&#xff08;笔者及身边的同事在工作中还经常…

【算法】深入理解布隆过滤器

1. 什么是布隆过滤器&#xff1f; 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率极高的概率型数据结构&#xff0c;用于检测某个元素是否在一个集合中。与常见的数据结构如哈希表不同&#xff0c;布隆过滤器无法删除元素&#xff0c;并且会存在一定的误判率&…

用示波器观测RC一阶电路零输入响应是否激励必须是方波信号

概述 RC一阶电路是一种简单但非常重要的电路&#xff0c;广泛应用于滤波、信号处理和时间常数分析等领域。在研究RC电路的动态特性时&#xff0c;零输入响应&#xff08;Natural Response&#xff09;是一项关键内容。本文将详细解析用示波器观测RC一阶电路零输入响应时&#…

如何实现安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯

在工业自动化中&#xff0c;实现不同品牌、不同型号设备之间的通讯是确保生产流程顺畅、高效运行的关键。本文详细介绍了安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯的具体方法。 一&#xff0e;软硬件需求 1.一台安川MP3300CPU301&#xff0c;其IP地址是192.…

SpringCloudAlibaba升级手册

目录 1. 版本对照 版本现状 SpringCloud与AlibabaCloud对应版本 Springboot与Elasticsearch版本对应 2. openfeign问题 问题 解决方案 3. Feign请求问题 问题 解决方法 4. Sentinel循环依赖 问题 解决方案 5. bootstrap配置文件不生效 问题 解决方案 6. Nacos的…

Codeforces Round 929 (Div. 3) F. Turtle Mission: Robot and the Earthquake

题目 题解&#xff1a; 按题解思路的代码&#xff1a; #include <bits/stdc.h>using i64 long long;void solve() {int n, m;std::cin >> n >> m;std::vector a(n, std::vector<int>(m));for (int i 0; i < n; i) {for (int j 0; j < m; j) …

STM32—SPI通讯协议

前言 由于I2C开漏外加上拉电阻的电路结构&#xff0c;使得通信线高电平的驱动能力比较弱&#xff0c;这就会号致&#xff0c;通信线由候电平变到高电平的时候&#xff0c;这个上升沿耗时比较长&#xff0c;这会限制I2C的最大通信速度&#xff0c; 所以&#xff0c;I2C的标准模…

uniapp-小程序开发0-1笔记大全

uniapp官网&#xff1a; https://uniapp.dcloud.net.cn/tutorial/syntax-js.html uniapp插件市场&#xff1a; https://ext.dcloud.net.cn/ uviewui类库&#xff1a; https://www.uviewui.com/ 柱状、扇形、仪表盘库&#xff1a; https://www.ucharts.cn/v2/#/ CSS样式&…

经纬恒润荣获2024中国汽车供应链大会创新成果奖

2024年9月24日-26日&#xff0c;2024中国汽车供应链大会暨第三届中国新能源智能网联汽车生态大会在武汉隆重举办。本届大会以“新挑战、新对策、新机遇——推动中国汽车供应链可持续发展”为主题&#xff0c;集聚政府主管领导、行业专家、汽车及零部件企业精英和主流媒体&#…

Ubuntu24.04 安装 NCAR Command Language(NCL)

目录 一般直接在Terminal中使用apt安装命令即可&#xff0c; 出现这样的问题&#xff0c; 如何解决这个问题呢&#xff1f; 一般直接在Terminal中使用apt安装命令即可&#xff0c; sudo apt install ncl-ncarg 但是&#xff0c;由于 Ubuntu 版本较新 Ubuntu 24.04&#xff…

Python OpenCV精讲系列 - 三维重建深入理解(十七)

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;Python OpenCV精讲⚡️⚡️&#x1f496;&#x1f496; 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计&#xff0c;从基础概念入手&#xff0c;逐步深入到图像处理、特征检测、物体识…

迪杰斯特拉算法的理解

图片转载自&#xff1a;最短路径算法-迪杰斯特拉(Dijkstra)算法 - 程序小哥爱读书的文章 - 知乎 https://zhuanlan.zhihu.com/p/346558578 迪杰斯特拉&#xff0c;一个广度优先算法&#xff0c;采用了贪心策略。 第一步&#xff0c;选取顶点D&#xff0c;更新和D相连的节点C&a…

78天闭门深造1258页SpringCloud学习进阶笔记,再战蚂蚁金服

概述 作为一名程序员应该都知道SpringCloud&#xff0c;不知道就该反思一下了啊[奸笑]。所以就不有板有眼的和官方的介绍一样了&#xff0c;今天就说一下&#xff0c;我理解的SpringCloud是什么&#xff1a;我所理解的Spring Cloud就是微服务系统架构的一站式解决方案&#xf…

Java项目: 基于SpringBoot+mysql+maven+vue林业产品推荐系统(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenvue林业产品推荐系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操…

算法工程师重生之第二十七天(合并区间 单调递增的数字 监控二叉树 总结)

参考文献 代码随想录 一、合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a…

Windows git 配置

需要在git-bash的目录下,配置.ssh 的配置文件 要 .ssh 目录下的配置无法使用

【SPIE独立出版】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024,2024年11月15-17日 )

第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024) The 4th International Conference on Computer Technology, Information Engineering and Electron Materials 会议官网&#xff1a;www.ctieem.org The 4th International Conference on Computer Technology,…

阿里 C++面试,算法题没做出来,,,

我本人是非科班学 C 后端和嵌入式的。在我面试的过程中&#xff0c;竟然得到了阿里​ C 研发工程师的面试机会。因为&#xff0c;阿里主要是用 Java 比较多&#xff0c;C 的岗位比较少​&#xff0c;所以感觉这个机会还是挺难得的。 阿里 C 研发工程师面试考了我一道类似于快速…

Android上的AES加密

基础算法说明 https://www.youtube.com/watch?vlnKPoWZnNNM 虽然这个视频讲的非常详细&#xff0c;但是涉及到具体底层算法&#xff0c;大致流程 1. 将数据转成HEX或者byte array 2.将数据分层一块块等大小的数据 3.将数据和key 进行一次混合&#xff0c;加密之后的输出&…