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

news2024/10/17 9:14:25

有两种方法:
通过提供的现成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文档的属性数据并储存于创建的 StringBuilder
        stringBuilder.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.coloradmin.cn/o/2216944.html

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

相关文章

为什么SSH协议是安全的?

SSH的传输层协议&#xff08;Transport Layer Protocol&#xff09;和用户鉴权协议&#xff08;Authentication Protocol&#xff09;确保数据的传输安全&#xff0c;这里只介绍传输层协议&#xff0c;是SSH协议的基础。 本文针对SSH2协议。 1、客户端连接服务器 服务器默认…

基于springboot实习管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

k8s use-context是什么

kubectl 的 use-context 命令用于在 Kubernetes 集群中切换上下文&#xff08;context&#xff09;&#xff0c;从而方便地在多个集群或命名空间之间进行操作。一个上下文定义了 kubectl 使用的 集群、用户 和 命名空间 的组合。 use-context 的作用&#xff1a; 每个上下文&…

msql事务隔离级别 线上问题

1. 对应代码 解决方式&#xff1a; 在事务隔离级别为可重复读&#xff08;RR&#xff09;时&#xff0c;数据库确实通常会记录当前数据的快照。 在可重复读隔离级别下&#xff0c;事务在执行期间看到的数据是事务开始时的数据快照&#xff0c;即使其他事务对数据进行了修改&am…

考研前所学c语言02(2024/10/16)

1.一个十进制的数转化为二进制的就是不断除二取余&#xff0c;得到的余数从下到上取 比如123&#xff1a; 结果为&#xff1a; 同理其他的十进制转八进制&#xff0c;十六进制就除八&#xff0c;除十六即可 再比如123转十六进制&#xff1a; 因为余数是11&#xff0c;十六进…

超详细的finalshell安装数据库以及数据库的基本操作

一、下载 MySQL Enterprise Edition Downloads | Oraclehttps://www.oracle.com/mysql/technologies/mysql-enterprise-edition-downloads.html 这边有不同的版本&#xff0c;要看你的操作系统&#xff08;centos7 / centos8&#xff09;安装的是哪个版本 我把连接提取出来了&…

Vivado - Aurora 8B/10B IP

目录 1. 简介 2. 设计调试 2.1 Physical Layer 2.2 Link Layer 2.3 Receiver 2.4 IP 接口 2.5 调试过程 2.5.1 Block Design 2.5.2 释放 gt_reset 2.5.3 观察数据 3. 实用技巧 3.1 GT 坐标与布局 3.1.1 选择器件并进行RTL分析 3.1.2 进入平面设计 3.1.3 收发器布…

stm32 F4和F7的硬件CRC保持一致的设置

stm32F4系列的CRC没什么设置选项 逆向一下算法&#xff1a;http://www.ip33.com/crc.html 在stm32F7里面&#xff0c;CRC设置很丰富&#xff0c;如下设置可以和f4算出来的保持一致

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述&#xff1a; ①DHCP Snooping使能DHCP的一种安全特性&#xff0c;用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…

沐风老师3DMAX地形散布插件TerrainScatter使用方法详解

3DMAX地形散布插件TerrainScatter&#xff0c;根据画定的区域范围和地形起伏&#xff0c;一键种植树木、批量摆放建筑等&#xff0c;对于熟练3dmax的用户&#xff0c;也可以使用TerrainScatter插件制作屋顶摆放瓦片的效果。该插件工作方式是将源对象的副本放置到闭合曲线范围内…

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—大连理工大学专场!!!(暨全额奖学金政策)

香港科技大学广州&#xff5c;可持续能源与环境学域博士招生宣讲会—大连理工大学专场&#xff01;&#xff01;&#xff01;&#xff08;暨全额奖学金政策&#xff09; ⏰时间&#xff1a;2024年10月24日&#xff08;星期四&#xff09;16:00 &#x1f3e0;地点&#xff1a;…

【刷题册】2024.10.13 - 2024.10.15

目录 一、2024.10.131.1 BC153 [NOIP2010]数字统计1.2 NC313 两个数组的交集1.2.1 思路一&#xff1a;暴力O(N^2)1.2.2 思路二&#xff1a;hash 1.3 AB5 点击消除 二、2024.10.142.1 BC64⽜⽜的快递2.2 DP4 最⼩花费爬楼梯2.3 数组中两个字符串的最⼩距离 三、2024.10.153.1 BC…

操作系统实验一:Linux进程管理及其扩展

实验目的&#xff1a; 通过实验&#xff0c;加深理解进程控制块、进程队列等概念&#xff0c;了解进程管理的具体实施方法。 实验内容&#xff1a; 1. 阅读并分析Linux内核源代码&#xff0c;了解进程控制块、进程队列等数据结构&#xff1b; 2. 实现一个系统调用&#xff…

基于springboot留守儿童爱心网站

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

C++核心编程和桌面应用开发 第十一天(静态转换 动态转换 常量转换 重新解释转换)

目录 1.静态类型转换 1.1语法 1.2用法 2.动态类型转换 2.1语法 2.2用法 3.常量类型转换 3.1语法 3.2用法 4.重新解释转换 4.1语法 1.静态类型转换 1.1语法 static_cast<目标转换类型>(待转换变量) 1.2用法 可用于基本数据类型之间的转换。比如int和char之…

Input-Source-Pro:自动切换输入法并提示状态

Input Source Pro 是一款 macOS 上的输入法辅助工具&#xff0c;它可以根据不同应用、不同网站来自动切换输入法&#xff0c;并可以在鼠标周围显示当前输入法状态。 macOS 不像 Windows 那样能保存输入法状态&#xff0c;因此这样的软件还是挺有用的。 ‍ 介绍 官网&#x…

前后端请求一致性学习

在进行前后端分离开发项目的过程中&#xff0c;前后端同学往往需要依照接口文档的基本信息以及相应的响应格式进行接口请求的开发&#xff0c;在这个过程中涉及到常见的Get、Post、Put、Patch等等的请求&#xff0c;相应的前后端的书写格式是什么&#xff0c;这篇文章进行一个记…

keil 配置栈溢出保护(arm)

1.前提是keil 配置为arm-gcc 编译器环境 2.配置编译项加上 -fstack-protector-strong 栈溢出的测试代码: void aaa(int a, char c) { char arr[5]; arr[a] = c; } aaa(8, d);//任意地方调用,超过数组arr的元素 添加代码栈溢出检测: uint32_t __stack_chk_gua…

WhatsApp防死号应该怎么做?

“WhatsApp又死号了”——外贸人的噩梦每天都会上演。号损是小事&#xff0c;重要是是成千上万的客户累计与聊天记录被一扫而空&#xff0c;所以相信我&#xff0c;当你准备好最WhatsApp&#xff0c;那么WhatsApp账号养成的操作从一开始就要注意并且牢记&#xff01;下面给大家…

Golang | Leetcode Golang题解之第482题秘钥格式化

题目&#xff1a; 题解&#xff1a; func licenseKeyFormatting(s string, k int) string {ans : []byte{}for i, cnt : len(s)-1, 0; i > 0; i-- {if s[i] ! - {ans append(ans, byte(unicode.ToUpper(rune(s[i]))))cntif cnt%k 0 {ans append(ans, -)}}}if len(ans) &…