zoukankan      html  css  js  c++  java
  • web项目读取classpath路径下面的文件

    首先分两大类按web容器分类

    一种是普通的web项目,像用Tomcat容器,特点是压缩包随着容器的启动会解压缩成一个文件夹,项目访问的时候,实际是去访问文件夹,而不是jar或者war包。

    这种的无论你是用获取路径的方法this.getClass().getResource("/")+fileName

    获取流的方法this.getClass().getResourceAsStream(failName);

    import org.springframework.util.ResourceUtils;

    File file= ResourceUtils.getFile("classpath:test.txt");

    或者

    ClassPathResource classPathResource = new ClassPathResource("test.txt");

    获取文件:classPathResource .getFile();

    获取文件流:classPathResource .getInputStream();

     

    第二种是内嵌web容器,其特点是只有一个jar文件,在容器启动后不会解压缩,项目实际访问时jar包或者war包

    这种最容易遇坑,最大的坑就是,用第一种方式读取,在eclipse,本地调试,完美运行,到linux环境下,就不行.

    首先用获取路径的方法this.getClass().getResource("/")+fileName,获取流的方法this.getClass().getResourceAsStream(failName);

    在本地运行时,绝壁能找到,你打印出来路径,没错,是咱们eclipse的工作目录,项目目录,但是在target目录下。

    现在给你分析为什么去到线上,就GG了,很简单,线上内嵌的工程,我们只会放一个jar文件上去,我理解是jar里面的路径是获取不到的,jar是封闭性东西吧,不像文件夹,总不能c:/home/xx.jar/file.txt

    读取jar里面的文件,我们只能用流去读取,不能用file,文件肯定要牵扯路径,jar那个路径刚刚我已经拼出来了

    jar里面文件读取方式:

    ClassPathResource classPathResource = new ClassPathResource("test.txt");

    获取文件流:classPathResource .getInputStream();

     

  • 相关阅读:
    vue, 同一个页面有多处地方需要上传图片
    单张图片上传,vue
    replace 替换只会替换找到的第一个字符
    vue ant design table中rowSelection属性的应用
    一般做页面时需要注意的事项
    vue 为form 表单赋值 获取form表单的值
    vue 父子组件中的传值
    vue 页面跳组件,实现点击浏览器自带返回箭头,返回到上一个页面,而不是返回道上个路由
    vue ant design a-table 的分页
    初建vuex项目
  • 原文地址:https://www.cnblogs.com/mr-wuxiansheng/p/7517894.html
Copyright © 2011-2022 走看看