解决:windows系统正常访问resource下的文件,但是Linux系统找不到resource下文件的问题

        不知道大家有没有遇到这种情况:在windows环境下项目启动的好好的,可是部署到生产的时候就会报错,找不到相关文件。刚好今天我就遇到了这种情况,真的是头疼屎了,为了让自己对这次bug加深一下印象,所以就写个笔记记录下来。

        首先,项目在本地是可以启动的,而部署到Linux系统的时候启动不起来了,报找不到文件的bug,我是可以确定文件是正常的,没有破损的,那导致出问题的原因,可能就是路径错误了,因为路径不对,所以加载不了相关的文件。

        今天百度了好多,恶补了一下Linux和Windows下路径的不同。

        1,首先,windows下面拼接路径支持反斜杠和正斜杠,但是Linux中拼接路路径不支持反斜杠的写法。即windows下面可以这样写:String path = “src\\main\\resources\\apiclient_key.pem” 或 String path = “src/main/resources/apiclient_key.pem”。但是在Linux中就不支持第一种写法

        2,windows下面(即idea中)加载路径可以根据相对路径也可以根据绝对路径,但是Linux系统下加载资源只能是绝对路径,即“/”。因为我们的项目一旦打包成jar,就类似于一个压缩包一样,不能以某一个点为坐标相对的去找文件,只能以这个项目的根目录去加载文件/资源。

        上面是今天大概了解到一点,肯定不够全面,如果大家还有什么可分享的,可以在评论下面打出来,一起讨论学习,哈哈。下面梦梦就直接上图说一下今天这个问题的解决方案了哈。

        项目的目录结构:
在这里插入图片描述

        刚开始写的代码,采用的是相对路径,当然项目获取到文件路径也只是本地的相对路径,现在才知道在服务器上根本就用不了:
在这里插入图片描述

        修改了变成了下面这样,使用getResourceAsStream(“/xxx.txt”)直接从resource根路径下面获取文件,打包成jar的项目,所有的文件都在整个jar中,就没有了所谓的相对路径。

在这里插入图片描述

        这种方法亲测成功,本地和生产都可以跑通。
        

猜你喜欢

转载自blog.csdn.net/qq_46540738/article/details/125418079
今日推荐