java - 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
如果有人能解释错误的原因,我将不胜感激。
解决方案
“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");
推荐阅读
- c++ - 主线程死锁 C++
- flutter - 如何在每只耳朵中播放两个不同的频率?(扑)
- pandas - Python - 从响应变量转换为 Pandas 数据框
- python - Selenium Chromedriver Headless 模式问题,不加载 url
- azure - Azure 函数代理 - 冷启动 - 错误 429 请求过多
- python-3.x - 基于返回的两个新列在数据框应用中有两个值
- c - 创建可加载内核模块 (LKM) 以阻止 IP 地址范围
- html - html 和 css @media 查询中的响应性
- python - _src.empty() 在函数'cv::cvtColor
- c# - 域网络C#中在线AD用户列表