首页 > 解决方案 > FileInputStream 找不到文件 intelliJ 思路

问题描述

我正在编写一个 DBUnit 测试。从 xml 文件导出数据时,编译器会产生以下错误:

java.io.FileNotFoundException: ru/iteco/blockchain/rzd/cred/core/server/db/hibernate/dao/contract/contract-data.xml (No such file or directory).

这是代码的相应部分:

@Before
public void setUp() throws Exception {
    super.setUp();
    beforeData = new FlatXmlDataSet(
            new InputStreamReader(new FileInputStream(
                    "ru/iteco/blockchain/rzd/cred/core/server/db/hibernate/dao/contract/contract-data.xml"),
                    "utf-8"));
    tester.setDataSet(beforeData);
    tester.onSetup();
}

变量 beforeData 是 IDataSet 类型。Java 类位于名为

/src/test/java/ru/iteco/blockchain/rzd/cred/core/server/db/hibernate/dao/ContractDAOImplTest.java

xml 文件位于名为

/src/test/resources/ru.iteco.blockchain.rzd.cred.core.server.db.hibernate.dao.contract/contract-data.xml

如果有人能解释错误的原因,我将不胜感激。

标签: javafilenotfoundexceptiondbunit

解决方案


“ru/iteco/区块链/rzd/

这是一个相对路径,这意味着它基于当前目录。该错误意味着它相对于您从中运行它的当前目录不存在。

最好从类路径加载资源文件以消除相对目录问题,例如this.getClass().getResource(filename).

考虑FlatXmlDataFileLoader.load(String filename) 正确使用它(该方法在其父类中)。

更新:

我不太明白我应该从提议的那个中使用什么。

如果“ru/iteco/blockchain/rzd/cred/core/server/db/hibernate/dao/contract/contract-data.xml”在类路径上,那么

beforeData = new FlatXmlDataFileLoader.load("/ru/iteco/blockchain/rzd/cred/core/server/db/hibernate/dao/contract/contract-data.xml");

推荐阅读