Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 未从jar读取属性文件_Java - Fatal编程技术网

Java 未从jar读取属性文件

Java 未从jar读取属性文件,java,Java,我有一个简单的maven项目,它从src/main/resources读取属性,并在eclipse中运行良好,但是当我将此应用程序导出为可运行的jar时,尽管它告诉我在构建jar时导出resources/test.properties,除非在调用shell脚本的位置包含test.properties文件,否则它将中断。为什么会发生这种情况?它在eclipse中如何工作良好?当我查看jar文件内容时,它完全在同一个文件夹中—资源,但命令行不起作用。有什么建议吗 下面是从文件中读取属性的代码- pu

我有一个简单的maven项目,它从src/main/resources读取属性,并在eclipse中运行良好,但是当我将此应用程序导出为可运行的jar时,尽管它告诉我在构建jar时导出resources/test.properties,除非在调用shell脚本的位置包含test.properties文件,否则它将中断。为什么会发生这种情况?它在eclipse中如何工作良好?当我查看jar文件内容时,它完全在同一个文件夹中—资源,但命令行不起作用。有什么建议吗

下面是从文件中读取属性的代码-

public class Test {
    private static Properties properties = new Properties();

    static{
        InputStream is = null;
        try{
            is = Test.class.getClassLoader().getResourceAsStream("test.properties");
            if(is!=null)
            properties.load(is);
        }catch(Exception e){
            throw new TestException("Unable to load the properties file :" + e.getMessage(), e);
        }finally {
            IOUtils.closeQuietly(is);
        }
    }

    public static String getProperty(String key){
        return properties.getProperty(key);
    }

    public static String getProperty(String key, String defaultValue){
        return properties.getProperty(key, defaultValue);
    }

要获取任何属性,我调用getProperty方法。

哦,对了。我认为Eclipse不正确地构建了.jar。在maven中,src/main/resources/*中的所有文件都打包到了/*中,但您的jar将该文件作为/resources/test.properties,getResourceAsStreamtest.properties希望该文件位于根文件夹中,而不是在/resources中。这是错误的。使用maven构建.jar。

显示加载文件的代码什么是不工作?您可能有另一个/test.properties来自另一个jar?名称太常见。当我打印从文件中读取的值时,当我从命令行执行时,所有值都显示为null。在eclipse中,它工作得很好。据我所知,我正在制作这个罐子。为了记录在案,我将文件名更改为一个模糊的名称。这也没用,这没道理。如果它在eclipse中工作,为什么当我从命令行运行时它不工作?我知道getResourceAsStream是从根文件夹读取的,但在eclipse中,我的根文件夹中没有这个文件。它显然是从资源中读取的。Edit-getResourceAsStream从类路径而不是根文件夹中读取。@rickygrimes我指的是类路径或jar存档的根文件夹,显然不是硬盘的根文件夹。@rickygrimes可能Eclipse在生成.jar时出错,但在IDE中运行时工作正常。你说它完全在同一个文件夹-资源-这是错误的,它应该在顶层。