zoukankan      html  css  js  c++  java
  • java中路径的问题

    在java中,涉及路径的问题有很多,不管在windows还是linux系统中,不要纠结”/“分隔符的使用,在windows系统中,资源加载器会自动的将”/“转换成”“。

    在java中获取资源的方式有2种,假设工程的编译输出路径为E:javaTest_Projectin

    1.getClass().getResource();

      1.getClass().getResource("/")  ---> E:javaTest_Projectin

      2.getClass().getResource("") ---> E:javaTest_Projectincomutil   (假设当前类的包名为com.util)

    2.getClass().getClassLoader().getResource()

      1.getClass().getClassLoader().getResource("")  ---> E:javaTest_Projectin

      2.getClass().getClassLoader().getResource("/")  ---> 不支持使用"/"

    3.servletContext.getResource("") ---> 在web项目中,使用servletContext接口中的getResource()方法进行文件获取,根目录是部署后的文件根目录,一般情况下priperties等的配置文件都在classes文件夹中,

    所以准确的获取方式为servletContext.getResource("/WEB-INF/classes/db.properties"),若在web项目中仍旧使用ClassLoader方式加载资源,则保持不变,即getClass().getClassLoader().getResource("db.properties")

    得出结论,context默认的根目录为项目部署目录,而classloader方式加载资源文件,默认根目录为资源文件编译目录,也就是classes目录

    public static void main(String[] args) throws IOException {
            InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("aa.txt");
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            char[] chars = new char[1024];
            int len = 0;
            while ((len = inputStreamReader.read(chars)) != -1) {
                for (char c : chars) {
                    System.out.print(c);
                }
            }
            inputStreamReader.close();
            inputStream.close();
        }

    打包后的资源文件访问问题总结,假设打包成jar包名称为Main.jar

    1.将资源文件打包在jar包内

    使用 getClass().getClassLoader().getResource("") 的方式读取资源文件,资源文件的路径如下图,aa.txt在解压Main.jar后的根目录下

    2.不将资源文件打包在jar包内

    使用 getClass().getClassLoader().getResource("") 的方式读取资源文件,则jar包需要与aa.txt在同一个目录下

    3.提出疑问,若打包时把资源文件打包在了jar包内,然后再将该资源文件进行删除,把资源文件放在jar包同目录,看是否能正常运行

    测试结果:当把jar包内的资源文件进行删除后,程序报错,无法找到该资源。然后把资源文件放在jar包的同目录内,又可以正常运行

    得出结论:jar包内的根目录其实等同于jar包所在的当前目录,当在java代码内进行资源文件引用时,会从jar包内部的当前目录和jar包当前所在目录进行资源文件的查找,

           可以把java工程中编译后的bin目录等同于jar包当前所在目录和jar包内部的当前目录。

  • 相关阅读:
    极简代码搞定视频剪辑
    python 遍历本地文件
    安装Anaconda需要知道的pc信息
    ng4 路由多参数传参以及接收
    Js之设置日期时间 判断日期是否在范围内
    VsCode显示左边折叠代码+-按钮
    H5+.Net Webapi集成微信分享前后端代码 微信JS-SDK wx.onMenuShareTimeline wx.onMenuShareAppMessage
    压测工具之JMeter之环境配置及运行
    C# 交集、差集、并集、去重
    Nginx初学者指南
  • 原文地址:https://www.cnblogs.com/zst-blogs/p/11306821.html
Copyright © 2011-2022 走看看