【问题标题】:FileInputStream can not find file intelliJ ideaFileInputStream 找不到文件 intelliJ 思路
【发布时间】:2018-05-11 15:44:43
【问题描述】:

我正在编写一个 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

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

【问题讨论】:

    标签: java filenotfoundexception dbunit


    【解决方案1】:

    "ru/iteco/blockchain/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");
    

    【讨论】:

    • 我不太明白我应该从建议的那个中使用什么。有必要写beforeData = new FlatXmlDataFileLoader.load(this.getClass().getResource("contract-data.xml"))?之类的东西还是以某种方式不同?
    • 这有帮助!谢谢!!
    • 太好了,还有其他后续行动吗?或者问题得到了解答?
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多