zoukankan      html  css  js  c++  java
  • 转载:Java项目读取配置文件时,FileNotFoundException 系统找不到指定的文件,System.getProperty("user.dir")的理解

    唉,读取个文件,也就是在项目里面去获得配置文件的目录,然后,变成文件,有事没事,总是出个 FileNotFoundException  系统找不到指定的文件,气死人啦。

    还有就是:System.getProperty("user.dir"),都说获得的是“工作目录”,有老铁们在意这个,工作目录怎么理解吗?我这做了个简单的测试。

    但是,你把这个配置文件放在项目的根目录下面,也就是 说你的项目文件夹下面直接放一个配置文件,这个时候,就可以,啥前缀不加的,就可以读取到,这个配置文件啦。

    但是,这么放置配置文件,好像有点不合适。

    那么,这个路径究竟该如何写,才不会报错呢?

    1,在 java project 中的配置文件读取,项目打包是jar类型的。

    System.getProperty("user.dir");
    解释:

    默认定位到的当前用户目录("user.dir")(即工程根目录)
    JVM就可以据"user.dir" + "你自己设置的目录" 得到完整的路径(即绝对路径)
    这有个前提,你的工程不是web项目,不然,这个返回值就不是项目的根目录啦,是tomcat的bin目录。

    2,在 java web project 中的配置文件读取

    ServletActionContext.getServletContext().xxx
    这地方的 ServletActionContext 可不是让你,直接拿来使用的,得分情况而定。
    1.  
      System.out.println("getProperty("user.dir") " + System.getProperty("user.dir"));
    2.  
      System.out.println("getServletContext");
    3.  
      System.out.println("getRealPath " + request.getSession().getServletContext().getRealPath("/"));
    4.  
      System.out.println("getContextPath " + request.getSession().getServletContext().getContextPath());
    5.  
      System.out.println("getResourcePaths " + request.getSession().getServletContext().getResourcePaths("/"));
    6.  
      System.out.println("getResourcePaths " + request.getSession().getServletContext().getResourceAsStream("/WEB-INF/classes/error.xml"));
    7.  
      return mav;
    想知道这个运行的结果吗?


    getRealPath:
    直接干到了打成war包target下的项目名称我这叫springMVC。
    getContextPath:
    这个就是获得当前URL的地址,我访问的这个链接全称是:http://localhost:8080/lxk/student
    看运行结果,就是你这个 web app 的名称啦,因为后面的student算是子功能吧。
    getResourcePaths:
    获得的是打包之后target目录下的项目名称下的所有的目录,具体看图。




    一般,老铁们搜索文章,都搜索到的是

    System.getProperty("user.dir")
    获得的是工作目录,这个搜索结果千篇一律。简直可怕。因为,这些老铁们从来没测试过。
    什么叫工作目录。。。

    可以看到,我这个在,Java web项目里面的允许结果,竟然是tomcat的bin 目录。这个懂的自然懂,不懂的,还是渣渣的迷糊。

    在非Java web 的项目里面,这个 System.getProperty("user.dir") 的运行结果,如下。

     
  • 相关阅读:
    day12 Python操作rabbitmq及pymsql
    day11 队列、线程、进程、协程及Python使用缓存(redis/memcache)
    day10 Python作用域 Python2.7与Python3.x的类继承的区别、异步IO、多进程,多线程简介
    day09 Python socket编程
    day08 面向对象补充及单例模式
    day07 configparser xml subprocess 面向对象
    day06 Python的一些内建变量、反射、hashlib模块、re模块、os模块、sys模块
    day05 Python多层装饰器、模块、序列化、字符串格式化、生成器和迭代器、递归、time、datetime模块、logging模块
    day04 Python一些内置函数及装饰器
    查看旧版jexus命令
  • 原文地址:https://www.cnblogs.com/zp-uestc/p/10112771.html
Copyright © 2011-2022 走看看