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;
}

目录src/main/java/com/honda/strategies/中确实存在此文件(agent_0001.config(。当我在windows机器上使用maven在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 CodeIntelliJ的windows版本上运行。

这是因为我在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/开始其文件搜索。

此堆栈溢出回答详细解释了getResource()的工作原理。

相关内容

  • 没有找到相关文章