FileNotFoundException:xxx(系统找不到指定的路径)

简介: 这次是有个两年前的项目吧,不知道为什么无法启动了。中间迭代了多个版本,现在另一个同事接手了,领导让看一下。因为时间间隔过长,问题处理比较费劲。其中有的是配置问题,比较好解决。中间有个FileNotFoundException的问题困扰了很长时间,最后找了个简单法子解决,希望给有碰到的网友提供些方法和灵感

前言

这次是有个两年前的项目吧,不知道为什么无法启动了。中间迭代了多个版本,现在另一个同事接手了,领导让看一下。因为时间间隔过长,问题处理比较费劲。其中有的是配置问题,比较好解决。

中间有个FileNotFoundException的问题困扰了很长时间,最后找了个简单法子解决,希望给有碰到的网友提供些方法和灵感。报错如下:

背景

我用的idea而领导用的eclipse,这个无论是哪个用tomcat是没有这个错误的。而使用maven启动就不行,原因大致如下:

1.当我们使用Maven来运行Spring Boot Application时,它默认会从项目的根目录下的 /src/main/resources 文件夹读取资源文件。

2.而当我们使用Tomcat来运行Spring Boot Application时,它会从编译过后的 /target/classes 文件夹读取资源文件。

3.最后还发现了在pom文件中有相关创建etc文件夹下的代码,关键代码和截图:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.1.1</version>
   <configuration>
      <!--将类文件打成war包 -->
      <failOnMissingWebXml>false</failOnMissingWebXml>
      <!--将资源文件打到classes目录下 -->
      <webResources>
         <resource>
            <directory>data/poem</directory>
            <targetPath>WEB-INF/data/poem</targetPath>
            <filtering>true</filtering>
         </resource>
         <resource>
            <directory>etc</directory>
            <targetPath>WEB-INF/etc</targetPath>
            <filtering>true</filtering>
         </resource>
      </webResources>
   </configuration>
</plugin>

问题流程:可以正常启动,中间报错也可以,但是访问接口就会报错,然后自动停止(maven启动)。如下图:

解决方法

1.直接在下面建立一个名为etc文件夹的

2.在IDEA中,你可以通过以下步骤设置Maven的工作目录:

  1. 在IDEA的右侧边栏中打开 "Maven Projects" 工具窗口。
  2. 找到你想运行的Maven项目,右键点击并选择 "Run Maven Build..."。
  3. 在弹出的对话框中,找到 "Working directory" 区域,填入你想设置的目录路径,比如

  1. 之后每次运行该Maven项目时,都会使用你设置的工作目录。这样应该就可以解决你的问题了。

提醒一下,使用绝对路径可能会导致你的项目在其他环境中无法正常运行。如果可能,建议你使用相对路径或类路径来引用资源文件。

思路:我们在报错日志中可以明显看到这个是去寻找的绝对路径,所以我们如果只是想本地测试的话,直接使用上面的办法指定目录即可。

在代码中查到引用了一个包,包中的业务逻辑是查询项目下etc文件。因为我使用的时候是21年,所以我强烈怀疑是有人后期有改动这个配置的代码地址,并且我回滚后依旧无法正常启动。

错误示例

这些下面是我在网上百度是碰到的一些解决方法,没有顶用的,供大家参考下。

1.修改配置文件的路径:

data-cloud-service-client.properties

文件移动到你的源代码目录,如src/main/resources,然后在代码中使用

classpath:data-cloud-service-client.properties

2.使用Spring的@PropertySource注解: 如果你使用Spring,可以用@PropertySource注解来指定配置文件的位置。它可以支持文件路径和类路径,比如:

@Configuration
@PropertySource("file:E:/Project/unios/unios-skill-bspt/unios-skill-bspt-controller/etc/data-cloud-service-client.properties")
public class Application {
   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
   }
}

3.在Maven pom.xml文件中添加资源(有可能可以): 可以在pom.xml文件中指定额外的资源路径。下面是一个例子:

<resources>
      <resource>
        <directory>unios-skill-bspt/${project.basedir}/etc</directory>
        <includes>
          <include>data-cloud-service-client.properties</include>
        </includes>
      </resource>
    </resources>

说实话这个bug解决倒是不难,难点在于找到bug的源头,尤其是多年的老代码,真的是全靠自己扣,真是太费劲了。

今天就到这里吧,感觉有用的小伙伴可以点个赞,你的支持就是我更新的最大动力!

相关文章
System.IO.FileNotFoundException:“未能加载文件或程序集“loginDAL”或它的某一个依赖项。系统找不到指定的文件。”
System.IO.FileNotFoundException:“未能加载文件或程序集“loginDAL”或它的某一个依赖项。系统找不到指定的文件。”
|
28天前
文件名: ?Ciwindows\system32 inetsrconfiglapplicationHost.config 错误:无法写入配置文件
文件名: ?Ciwindows\system32 inetsrconfiglapplicationHost.config 错误:无法写入配置文件
30 0
|
2月前
|
Java
Error:java: 错误: 无效的源发行版:13, 类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。
Error:java: 错误: 无效的源发行版:13, 类文件具有错误的版本 61.0, 应为 55.0 请删除该文件或确保该文件位于正确的类路径子目录中。
|
C++
VS配置QtTools的路径时报“路径中具有非法字符”错误
VS配置QtTools的路径时报“路径中具有非法字符”错误
247 0
|
Java Spring
JAVA读取绝对路径文件和项目类路径下的文件的方法
JAVA读取绝对路径文件和项目类路径下的文件的方法
1633 0
|
Java
Java查询指定文件目录下指定文件名的文件的方法
Java通过正则表达式Regex,和通配模式The globbing pattern查询指定文件目录下指定文件名的文件
187 0
syberh:未检测到已安装的target,请先安装target/找不到项目配置文件project.config.json,请确定当前目录是Syberh项目根目录!
syberh:未检测到已安装的target,请先安装target/找不到项目配置文件project.config.json,请确定当前目录是Syberh项目根目录!
195 0
File类详解(获取文件名称、大小、路径、创建等)
File类详解(获取文件名称、大小、路径、创建等)
1125 1
|
存储 安全 Java
文件找不到!
谈文件异常前,先要给各位复习一下磁盘 IO 的知识,说到 IO,就不得不提一下计算机的存储系统体系,主要分为 CPU、内存、磁盘,而磁盘又分为机械磁盘和固态硬盘。一般来说,离 CPU 越近,价格越贵,速度越快,容量越小;反之,离 CPU 越远,价格越便宜,速度越慢,容量越大,见下图。
225 0
文件找不到!
os.rename批量修改文件名称报错:[WinError 2] 系统找不到指定的文件的解决方案
os.rename批量修改文件名称报错:[WinError 2] 系统找不到指定的文件的解决方案
os.rename批量修改文件名称报错:[WinError 2] 系统找不到指定的文件的解决方案