Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t从JAR加载属性_Java_Properties_Jar - Fatal编程技术网

Java Can';t从JAR加载属性

Java Can';t从JAR加载属性,java,properties,jar,Java,Properties,Jar,几天来,我一直在尝试让我的Java项目从位于JAR文件中的文件加载一些属性。但是,在尝试加载文件时,我经常得到一个空指针 文件夹层次结构的属性文件位于/data中,所有源文件位于/emp/**/** 代码 如果data位于jar的根目录中,如果build_info.properties位于jar的数据目录中,并且jar位于类路径上,则getClass().getClassLoader().getResourceAsStream(“data/build_info.properties”)将找到该属

几天来,我一直在尝试让我的Java项目从位于JAR文件中的文件加载一些属性。但是,在尝试加载文件时,我经常得到一个空指针

文件夹层次结构的属性文件位于/data中,所有源文件位于/emp/**/**

代码
如果
data
位于jar的根目录中,如果
build_info.properties
位于jar的数据目录中,并且jar位于类路径上,则
getClass().getClassLoader().getResourceAsStream(“data/build_info.properties”)将找到该属性文件。您还可以使用
getClass().getResourceAsStream(“/data/build_info.properties”)


如果
getClass()
返回的类加载器加载的类与类路径上有jar的类不同,则可能会出现一些特殊情况。

如果
数据
位于jar的根目录中,如果
build\u info.properties
位于jar的数据目录中,并且如果jar位于类路径上,则
getClass().getClassLoader().getResourceAsStream(“数据/构建信息.properties”)将找到该属性文件。您还可以使用
getClass().getResourceAsStream(“/data/build_info.properties”)


如果
getClass()
返回的类加载器加载的类与类路径上包含jar的类不同,则可能会出现特殊性。

您也可以尝试--


你也可以试试--


我对一个死气沉沉的简单控制台应用程序也有同样的问题。最终我发现了一个提示,我把我的控制台应用程序变成了一个swing应用程序,突然一切都正常了


上面链接中的解释确实有一定的意义:因为控制台应用程序在创建shell时会获得其属性(包括类路径),所以它不会知道JVM在/for/by期间定义的类路径。

我对一个死气沉沉的简单控制台应用程序也有同样的问题。最终我发现了一个提示,我把我的控制台应用程序变成了一个swing应用程序,突然一切都正常了


上面链接中的解释确实有一定的道理:因为控制台应用程序在创建shell时会获得其属性(包括类路径),所以它不会知道JVM在/for/by期间定义的类路径。

我相信所有这些都是正确的。如何确保JAR位于我的类路径上?喂?我真的可以使用help,你可以在程序中做的一件事就是尝试使用jar中的类。如果您得到一个NoClassDefFoundError或ClassNotFoundException(哪一个取决于您具体做了什么),那么它不会在那个jar中看到任何东西。这是安卓的来源吗?我对安卓知之甚少。如果是这样的话,你应该在你的问题中添加一个安卓标签。我相信所有这些都是真的。如何确保JAR位于我的类路径上?喂?我真的可以使用help,你可以在程序中做的一件事就是尝试使用jar中的类。如果您得到一个NoClassDefFoundError或ClassNotFoundException(哪一个取决于您具体做了什么),那么它不会在那个jar中看到任何东西。这是安卓的来源吗?我对安卓知之甚少。如果是这样,你应该在你的问题中添加一个安卓标签。
Properties defaultProps = new Properties();
    try {
        InputStream in = getClass().getClassLoader().getResourceAsStream("data/build_info.properties");
        //InputStream in = new URL("file:data/build_info.properties").openStream();

        defaultProps.load(in);
        in.close();
    } catch (FileNotFoundException e) {
        //e.printStackTrace();
    } catch (IOException e) {
        //e.printStackTrace();
    } catch (NullPointerException e){
        Log.E("NPE- Properties not loaded", "properties");
        revision = "Properties file not found";
    }

    if (defaultProps.getProperty("build.major.number") == null) {
        Log.W("Properties not loaded", "properties");
        revision = "Properties file not found";
    } else {
        Log.V("Properties Loaded Successfully", "properties");
        
        revision = "Version: " + defaultProps.getProperty("build.major.number")
            + "." + defaultProps.getProperty("build.minor.number") + "    "
            + "Revision: "
            + defaultProps.getProperty("build.revision.number");
    }
Thread.currentThread().getContextClassLoader().getResourceAsStream("data/build_info.properties");