- 概述
便携式文档格式(PDF)是一种用于文档的常见文件格式。它用于分发需要保留原始格式的电子文档。
在本教程中,我们将探索Java中读取PDF文件的两个最流行的库:Apache PDFBox和iText。
- 配置
我们将使用Maven来管理依赖。
此外,我们将向项目根目录添加一个示例PDF文件。该文件包含一个简单的短语“Hello World!”。
接下来,我们将读取示例PDF文件,并测试提取的文本与预期结果是否一致。
- 使用Apache PDFBox
便携式文档格式(PDF)是一种用于文档的常见文件格式。它用于分发需要保留原始格式的电子文档。
在本教程中,我们将探索Java中读取PDF文件的两个最流行的库:Apache PDFBox和iText。
我们将使用Maven来管理依赖。
此外,我们将向项目根目录添加一个示例PDF文件。该文件包含一个简单的短语“Hello World!”。
接下来,我们将读取示例PDF文件,并测试提取的文本与预期结果是否一致。
在本教程中,我们将探讨Java中计算两个日期之间工作日数量的两种不同方法。我们将看到一种使用_流_的可读版本,以及一种不那么易读但更高效的选项,它根本不进行循环。
首先,让我们看看如何使用_流_来实现。计划是循环遍历我们两个日期之间的每一天,并计算工作日:
long getWorkingDaysWithStream(LocalDate start, LocalDate end){
return start.datesUntil(end)
.map(LocalDate::getDayOfWeek)
.filter(day -> !Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(day))
.count();
}
漂亮打印Java中的Map涉及到以一种视觉上吸引人且易于阅读的方式格式化和显示Map中的键值对。尽管Java没有提供内置的漂亮打印Map的方法,我们必须实现自定义解决方案。
在本教程中,我们将学习如何实现这一目标。根据我们的偏好和详细程度,我们将探索使用标准JDK和外部库的多种方法。
Map在我们继续之前,让我们创建一个Map来操作:
Map`<String, Object>` map = Map.of(
"one", 1,
"two", 2,
"inner", Map.of(
"ten", 10,
"eleven", 11
)
);
在本教程中,我们将讨论AWS为用户提供的两项顶级服务:SNS和SQS。首先,我们将简要描述这两项服务,并查看一些简单的用例。然后,我们将从不同角度指出它们之间的主要区别。最后,我们将看到这些服务结合在一起时表现出的强大功能和能力。
用户使用Amazon Simple Notification Service作为发送实时通知的托管服务。 为了更容易理解SNS,我们可以特别关注三个对象:主题、发布者和订阅者。一个主题可以从多个发布者接收消息,并将相同的消息传递给多个订阅者。发布者发送到主题的每条消息都会到达所有注册的订阅者:
在本教程中,我们将看到如何在Gradle项目中配置条件依赖。
我们将为演示设置一个多模块项目。让我们前往_start.spring.io_并创建我们的根项目_conditional-dependency-demo_。我们将使用Gradle和Java以及Spring Boot。
我们还添加了两个提供者模块_provider1_和_provider2_,以及两个消费者模块_consumer1_和_consumer2_:

在本教程中,我们将学习如何使用Maven命令在_pom.xml_中检测重复依赖。我们还将看到如何使用Maven Enforcer插件在存在重复依赖时使构建失败。
在_pom.xml_中存在重复依赖的风险是,目标库的最新版本可能不会应用到我们项目的构建路径中。例如,考虑以下_pom.xml_:
``<project>``
[...]
`<dependencies>`
``<dependency>``
```<groupId>```org.apache.commons```</groupId>```
```<artifactId>```commons-lang3```</artifactId>```
```<version>```3.12.0```</version>```
``</dependency>``
``<dependency>``
```<groupId>```org.apache.commons```</groupId>```
```<artifactId>```commons-lang3```</artifactId>```
```<version>```3.11```</version>```
``</dependency>``
`</dependencies>`
[...]
``</project>``
有时,在使用Java应用程序时,我们需要访问系统属性和环境变量的值。
在本教程中,我们将学习如何从运行中的Java应用程序中检索用户名。
获取用户信息的一种方式,更确切地说,是其名称,我们可以使用_System.getProperty(String)。这个方法需要一个键。**它们通常是统一的并且预定义的,比如_java.version、os.name、_user.home_等。** 在我们的情况下,我们对_user.name_感兴趣:
在本教程中,我们将探索在Java中封装字符串输入转换为整数的不同方法,同时优雅地处理异常。
通常使用Integer.parseInt()方法来执行字符串到整数的转换,但如果输入不是数字,它会抛出一个异常。
使用try-catch块来处理这个异常可能会使代码重复且难以阅读:
try {
return Integer.parseInt(input);
} catch (NumberFormatException e) {
logger.error("在将字符串转换为整数时遇到异常");
}