栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java web项目 , jar包如何读取配置文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java web项目 , jar包如何读取配置文件

java 项目结构:


application.properties

app.version=1.0
getClassLoader().getResource(“application.properties”)只支持web项目读取配置文件。 getClassLoader().getResourceAsStream(“application.properties”)支持web项目和jar包读取配置文件。 完整代码:
package com.test;

import java.io.*;
import java.net.URL;
import java.util.Properties;

public class JavaPath {

    
    public static void bothJarAndWeb1() {
        InputStream inputStream = JavaPath.class.getClassLoader().getResourceAsStream("application.properties");
        commonMethod(inputStream);
    }

    
    public static void bothJarAndWeb2(){
        InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties");
        commonMethod(inputStream);
    }

    
    public static void onlyWeb(){
        URL resource = JavaPath.class.getClassLoader().getResource("application.properties");
        File file = new File(resource.getPath());
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        commonMethod(inputStream);
    }

    public static void commonMethod(InputStream inputStream){
        Properties properties = new Properties();
        try {
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("app.version=" + properties.get("app.version"));
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args)  {
        System.out.print("bothJarAndWeb1 output: ");
        JavaPath.bothJarAndWeb1();
        System.out.print("bothJarAndWeb2 output: ");
        JavaPath.bothJarAndWeb2();
        System.out.print("onlyWeb output: ");
        JavaPath.onlyWeb();
    }
}

直接在idea中运行输出结果:

bothJarAndWeb1 output: app.version=1.0
bothJarAndWeb2 output: app.version=1.0
onlyWeb output: app.version=1.0

打包成jar后运行输出结果:

java -jar javapath.jar                     
bothJarAndWeb1 output: app.version=1.0
bothJarAndWeb2 output: app.version=1.0
onlyWeb output: java.io.FileNotFoundException: file:/Users/xiaosan/documents/work/javapath/out/artifacts/javapath_jar/javapath.jar!/application.properties (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.(FileInputStream.java:120)
        at com.test.JavaPath.onlyWeb(JavaPath.java from InputFileObject:48)
        at com.test.JavaPath.main(JavaPath.java from InputFileObject:61)
Exception in thread "main" java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:418)
        at java.util.Properties.load0(Properties.java:337)
        at java.util.Properties.load(Properties.java:325)
        at com.test.JavaPath.commonMethod(JavaPath.java from InputFileObject:14)
        at com.test.JavaPath.onlyWeb(JavaPath.java from InputFileObject:52)
        at com.test.JavaPath.main(JavaPath.java from InputFileObject:61)

注意错误file:/Users/xiaosan/documents/work/javapath/out/artifacts/javapath_jar/javapath.jar!/application.properties (No such file or directory)中的javapath.jar!/application.properties把jar文件当做了目录。

web项目与jar包的区别
  • web项目放在servlet容器中运行,解压后是多个目录和文件,可以通过资源路径找到文件。
  • jar包只是一个jar文件,不能通过资源路径寻找配置文件。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号