java - Java在ubuntu上找不到文件
问题描述
我有个问题。我有一个带有名为getAgentStrategy
. 在该函数中,我有以下代码:
try(FileReader reader = new FileReader("src/main/java/com/honda/strategies/agent_0001.config")) {
// Read all properties from agent strategy file
Properties properties = new Properties();
properties.load(reader);
// Assign all properties to variables
String template = properties.getProperty("template");
String market = properties.getProperty("market");
String coin = properties.getProperty("coin");
// Create strategy object with given values
AgentStrategy agentStrategy = new AgentStrategy();
agentStrategy.setTemplate(template);
agentStrategy.setMarket(market);
agentStrategy.setCoin(coin);
return agentStrategy;
}
catch (Exception e) {;
e.printStackTrace();
return null;
}
此文件 ( agent_0001.config
) 确实存在于目录中:src/main/java/com/honda/strategies/
. 当我使用 maven 在 Windows 机器上的 VS Code 中运行此代码时,一切正常并且可以找到该文件。现在我已经在我的 Ubuntu 机器上安装了 Maven 并将我的项目复制到服务器上。该项目已成功构建,但是当我尝试运行它时,出现以下错误:
java.io.FileNotFoundException: src/main/java/com/honda/strategies/agent_0001.config (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:211)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:153)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:108)
at java.base/java.io.FileReader.<init>(FileReader.java:60)
at com.hatop.drivers.StrategyDriver.getAgentStrategy(StrategyDriver.java:234)
at com.hatop.drivers.StrategyDriver.run(StrategyDriver.java:60)
at com.hatop.drivers.HatopDriver.lambda$4(HatopDriver.java:193)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
我不想对项目的路径进行硬编码,因为我可以在多个环境中运行,并且此代码可以在使用VS Code
or的 Windows 版本上运行IntelliJ
。
这是因为我在 Ubuntu 上运行的版本是一个.jar
没有我提供的文件树结构的文件吗?
我怎样才能解决这个问题?
解决方案
文件路径问题是我发现最令人沮丧的错误之一,但 Maven 的标准文件夹结构包括一个resources
文件夹,其内容可以通过getClass().getResource(String path)
任何类上可用的函数访问。
└───maven-project
├───pom.xml
└───src
├───main
│ ├───java // Put YourClass.java here
│ ├───resources // <instance of YourClass>.getClass().getResource("filename.ext") will find `filename.ext` saved here.
如果您的类在包内(例如org.example.agent
),那么getResource()
将从resources/org/example/agent/
.
这个 Stack Overflow 答案解释了更多关于如何getResource()
工作的信息。
推荐阅读
- javascript - 在 react-chartjs2 中更改工具提示方向
- ssl - 本机是否支持kafka SSL连接?
- pandas - 如何从 pandas.DataFrame 中的段落中提取句子并保留段落键?
- angularjs - gulp 更新后可能未处理的拒绝 (4.0.2)
- javascript - 剑道网格验证不出现
- xcode - 在 App Store 之外分发 Mac 应用程序。我应该怎么签?
- angular - @NgModule 使用 SystemJs 在运行时加载动态组件
- bash - awk:特定符号后的替换字符
- ios - iOS 设备和 BLE 堆栈版本 02.12 的问题
- c# - 更改自适应卡片机器人框架的分隔符属性