当前位置: 首页 > 面试题库 >

Java:如何从其他模块读取文件?

姚兴安
2023-03-14
问题内容

我有一个包含多个Maven模块的项目

project/pom.xml
       /external_services/pom.xml
                         /ifs/pom.xml
                             /src/test/java/
                                           /MockIFSClient.java
                                           /IFSClientTest.java
                             /src/test/java/resources/sample.json
       /inventory/pom.xml
                 /business/pom.xml
                             /src/main/java/InventorySummary.java
                 /services/pom.xml
                             /src/main/java/InventorySummaryResource.java
                             /src/main/test/InventorySummaryResourceTest.java

MockIFSClient 访问sample.json

try {
    inventoryPriceDetails = mapper.readValue(new File(getClass().getResource("/getInventoryAndPriceResponse.json").getPath()), new TypeReference<List<InventoryPriceDetail>>() {
    });
} catch (final IOException e) {
    throw new RuntimeException("could not read resource :" + e.getMessage());
}

因此 IFSClientTest 运行鳍,因为它们在同一包中。

问题? 尝试访问相同代码的
InventorySummaryResourceTest调用MockIFSClient,但现在失败,因为

could not read resource :file:/Users/harith/IdeaProjects/inventory_api/external_services/ifs/target/ifs-1.0-SNAPSHOT-tests.jar!/sample.json (No such file or directory)

services / pom.xml 具有以下依赖性

<dependency>
    <groupId>com.org.project.external_services</groupId>
    <artifactId>ifs</artifactId>
    <version>${project.version}</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

我要做出什么改变

new File(getClass().getResource("/getInventoryAndPriceResponse.json").getPath())

这样也可以从不同的模块访问它


问题答案:

这个答案帮助我正确了

如何从Java中的类路径真正读取文本文件

我将代码更改为

inventoryPriceDetails = mapper.readValue(getClass().getResourceAsStream("/getInventoryAndPriceResponse.json"), new TypeReference<List<InventoryPriceDetail>>() {});


 类似资料:
  • 我正在使用Intellij Idea-2021.3.2和Java8。在Intellij中,我无法读取同一模块中另一个包中的文件。该文件位于main而不是资源文件夹下。但在Eclipse中,我可以读取。 例如。下面的代码在 eclipse 和 intellij 中打印不同的输出。 在Intellij中,代码打印“资源为空”,但在eclipse中,代码打印“资源已找到!!”。 在intellij中是否

  • 该部分 API 将帮助您使用其他 mBuild 电子模块。 注意:你需要额外购买包含 mBuild 电子模块扩展包或套装来获得 mBuild 模块以使用这些功能。 省略代码中的halocode 注意:该部分 API 省略了“halocode.”,本篇提及的所有 API 均省略了“halocode.” ,如 led_driver.off( )实际为halocode.led_driver.off()。

  • 问题内容: 我正在用Go编写执行大量并行计算的软件。我想从工作线程中收集数据,但我不太确定如何以安全的方式进行数据收集。我知道我可以使用通道,但是在我的场景中,它们使它变得更加复杂,因为我必须以某种方式同步主线程中的消息(等到每个线程发送了一些东西)。 情境 主线程创建 n个 实例,并在goroutine中启动其方法,以便每个工作线程都在各自的线程中运行。主线程每10秒应从工作线程中收集一些简单值

  • 其他模块 (40%) Nginx的模块种类挺多的,除了HTTP模块,还有一些核心模块和mail系列模块。核心模块主要是做一些基础功能,比如Nginx的启动初始化,event处理机制,错误日志的初始化,ssl的初始化,正则处理初始化。 mail模块可以对imap,pop3,smtp等协议进行反向代理,这些模块本身不对邮件内容进行处理。 core模块 (40%) Nginx的启动模块 (40%) 启动

  • 问题内容: 我有这个网页的csv档案。我想阅读下载文件中的某些列(可以在右上角下载csv版本)。 假设我要2列: 59在标题中是 60在标题中是。 但是,由于某些原因,网页的作者有时决定四处移动列。 最后,我想要这样的东西,请记住,价值可能会丢失。 如果这些列保持正确的名称,这将防止我的程序在将来再次更改列时出错。 到目前为止,我已经尝试过各种使用模块的方法,最近都尝试过使用该模块。两者都没有运气

  • 问题内容: 我在第3方中设计的课程很差,我需要访问它的一个私有字段。例如,为什么我需要选择私有字段? 如何使用反射获取值? 问题答案: 为了访问私有字段,你需要从类的声明字段中获取它们,然后使其可访问: 编辑:正如所说,访问字段,将字段设置为可访问并检索值都可能引发,尽管上面需要注释的唯一检查异常。 在NoSuchFieldException如果你问一个字段由不符合声明的字段的名称将被抛出。 该会