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,一经查实,立即删除!

相关文章

【洛谷】AT_abc188_c [ABC188C] ABC Tournament 的题解

【洛谷】AT_abc188_c [ABC188C] ABC Tournament 的题解 洛谷传送门 AT传送门 Vjudge传送门 题解 谔谔&#xff0c;最近月考&#xff0c;没时间写题解。现在终于有时间了qaq 通过对样例的数据分析我们可以看到。本题的考点就是一个二叉搜索树&#xff0c;因此最简单的方法…

Day31 || 122.买卖股票的最佳时机 II、55. 跳跃游戏、 45.跳跃游戏II 、1005.K次取反后最大化的数组和

122.买卖股票的最佳时机 II 题目链接&#xff1a;力扣题目链接 思路&#xff1a;因为是求虽大利润完全可以假设知道第二天涨前一天买入即可&#xff0c;就是求两天只差大于0 的和。 55. 跳跃游戏 题目链接&#xff1a;力扣题目链接 思路&#xff1a;应该从后往前循环判断&…

搜维尔科技:使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据

使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据 搜维尔科技&#xff1a;使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据

【初识数据库】

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

数据结构与算法JavaScript描述练习------第12章排序算法

1. 使用本章讨论的所有算法对字符串数据而非数字数据进行排序&#xff0c;并比较不同算法的执行 时间。这两者的结果是否一致呢&#xff1f; function CArray(numElements) { this.dataStore []; this.pos 0; this.numElements numElements; this.insert insert; this.toS…

HTTP安全么?如何更好的保护您的网站

在互联网飞速发展的今天&#xff0c;网络安全问题日益严峻。HTTP作为最常见的网络通信协议&#xff0c;虽然在传输效率方面表现优异&#xff0c;但其安全性却常常令人担忧。许多企业和个人网站在使用HTTP进行数据传输时&#xff0c;可能忽视了其中潜在的风险。那么&#xff0c;…

搜维尔科技:SenseGlove Nova 2触觉反馈手套开箱测评

SenseGlove Nova 2触觉反馈手套开箱测评 搜维尔科技&#xff1a;SenseGlove Nova 2触觉反馈手套开箱测评

react函数组件和类组件

react函数组件和类组件 函数组件会捕获render内部的差异&#xff0c;性能主要取决于代码正在进行的操作&#xff0c;函数组件和类组件区别可以忽略不计&#xff0c;但是优化策略是有不同的。 类组件 class Welcome extends React.Component {render() {return <h1>{th…

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

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

OpenCV人脸检测与识别:构建智能识别系统

在当今科技日新月异的时代&#xff0c;人脸识别技术以其独特的便利性和安全性&#xff0c;在各个领域都展现出了巨大的应用潜力。从智能手机的面部解锁&#xff0c;到机场的自动安检&#xff0c;再到商场的顾客行为分析&#xff0c;人脸识别技术无处不在。本文将深入探讨如何使…

简单认识redis - 9 布隆过滤器

布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率很高的随机数据结构&#xff0c;用于判断一个元素是否可能在一个集合中。 一、工作原理 1. 初始化&#xff1a; 布隆过滤器由一个位数组&#xff08;通常是一个很长的二进制数组&#xff09;和若干个哈希函数组…

【scene_manager_msgs】ROS2 自定义消息、服务的包

scene_manager_msgs 在ROS 1向ROS 2迁移的过程中&#xff0c;有些依赖项发生了变化&#xff0c;这是因为ROS 2的通信框架和工具链与ROS 1不同&#xff0c;尤其在消息、服务和动作生成方面有了一些新的方法和库。 动作库 如果你的ROS 1包依赖于actionlib或actionlib_msgs&…

拍立淘API返回值中的商品列表与详细信息解析

拍立淘&#xff08;Pailitao&#xff09;是阿里巴巴旗下的一种图像识别购物技术&#xff0c;允许用户通过拍摄商品照片来搜索相似的商品。尽管官方没有直接开放拍立淘的API给公众使用&#xff0c;但可以通过淘宝开放平台&#xff08;Taobao Open Platform&#xff09;的一些图像…

Python logging模块实现日志饶接 按照时间命名

import os import zipfile from datetime import datetime from logging.handlers import RotatingFileHandlerclass CompressedRotatingFileHandler(RotatingFileHandler):"""自定义的 RotatingFileHandler&#xff0c;支持在日志轮转时压缩旧日志文件&#xf…

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

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

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

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

开发语言最佳实践

目录 一、开发IOS最好的语言是什么&#xff1f; 二、开发安卓的最好语言是什么&#xff1f; 三、开发鸿蒙应用最好的语言是什么&#xff1f; 四、做大模型训练最好的开发语言是什么&#xff1f; 一、开发IOS最好的语言是什么&#xff1f; 开发iOS最好的语言是Swift。Swift…

C#学习笔记(六)

C#学习笔记&#xff08;六&#xff09; 第 三 章 基本语句以及语法二、程序逻辑 if 选择和分支结构 switch1. if2. switch 三、循环语句1. for 循环的使用2. while 循环的使用3. 对比 break 和 continue 第 四 章 字符串 string 详解和高效 StringBuilder 类暂不练习与学习。 第…

CAD快捷键大全非常详细

绘图菜单 快捷键 注意事项 1.线 L 2.构造线 XL 3.多段线 PL 一般用来画三维图 4.正多边形 POL 5.矩形 REC 6.圆弧 A 7.圆 C 8.修订云线 REVCLOUD 9.样条曲线 SPL 10.椭圆 EL 轴测图&#xff1a;ELI 11.椭圆弧…

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

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