zoukankan      html  css  js  c++  java
  • Java 获取资源文件路径

    1 问题描述

    通过源码运行时,一般使用如下方式读取资源文件:

    String str = "1.jpg";
    

    资源文件与源码文件放在同一目录下,或者拥有同一父级目录:

    String str = "a/b/1.jpg";
    

    这样直接编译运行没有问题,但是打成JAR包后会读取不了,直接抛空指针异常。

    2 解决办法

    使用URL或者InputStream进行读取:

    URL url = getClass().getClassLoader().getResource("a/b/1.jpg");
    InputStream inputStream = getClass().getClassLoader().getResourceAsStream("a/b/1.png");
    

    注意不能在路径前加/

    URL url = getClass().getClassLoader().getResource("/a/b/1.jpg");
    InputStream inputStream = getClass().getClassLoader().getResourceAsStream("/a/b/1.png");
    

    这样读取出来是null
    getClass().getClassLoader().getResource()从源码运行的URL如下:
    在这里插入图片描述
    从JAR包运行的URL如下:
    在这里插入图片描述
    测试系统Win10,从源码运行的话有一个file:前缀,而从JAR包运行有一个jar:file:前缀。
    前缀一般没有影响,一般都能直接通过URL获取文件,比如在SwingJFrame中设置图标:

    mainFrame.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("image/icon.png")).getImage());
    

    如果只能通过String处理路径,需要把前缀file:或者jar:file:去掉,JAR的话可以结合JarFile类读取文件。

  • 相关阅读:
    第五周项目4-静态成员应用
    第五周项目3-用多文件组织多个类的程序
    python的wraps函数
    python函数加括号于不加括号的区别
    socket.error: [Errno 10048]
    tensorflow的MNIST教程
    cidr地址段
    mongodb数据库的存储问题
    搭建巡风扫描器
    mongodb的数据库,集合,数据可介绍。
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/13232704.html
Copyright © 2011-2022 走看看