如何在Spring中使用ClassPathResource加载外部文件?

时间:2016-04-17 03:58:15

标签: java spring

我们在一个驱动器上有一个文件(C:\ megzs \ realm.properties)。我们想加载这个文件,并使用Spring中提供的ClassPathResource读取内容。但我们看到文件未找到异常。我们正在尝试的代码是

Resource resource = new ClassPathResource("file:c:/megzs/realm.properties");
Properties prop = PropertiesLoaderUtils.loadProperties(resource);

这里我们使用ClassPathResource来加载外部文件。 ClassPathResource可以加载外部文件吗?
我们如何加载多个属性文件(一个来自类路径,另一个来自绝对路径)??

3 个答案:

答案 0 :(得分:3)

如果要访问基于文件的资源,请使用FileSystemResource并将其提供给PropertiesLoaderUtils.loadProperties()方法。下面的代码从文件系统读取属性文件,如果不存在,它将从类路径加载它。希望它有所帮助。

    public static Properties getProperties(String propertyFile) {
    try {
        Resource resource = new FileSystemResource(propertyFile);
        if (!resource.exists()) {
            resource = new ClassPathResource(propertyFile);
        }
        return PropertiesLoaderUtils.loadProperties(resource);
    } catch (Exception ignored) {
        return null;
    }
}

答案 1 :(得分:0)

使用@PropertySource()加载许多属性 将使用properties对象读取Environment 可能你应该尝试这种方法,你的方法不是 错了,这对我来说有点混乱

@Configuration
    @PropertySource({
        "classpath:config.properties",
        "file:/path/to/application.properties" //if same key, this will 'win'
    })
    public class AppConfig {

        @Autowired
        Environment env;

                public void ReadProperties() {

        String property1 = env.getProperty("property");
        String property2 = env.getProperty("property2");
                }

                //if theres same key found in the second property 
                //file key in the second property file wiil be read
    }

答案 2 :(得分:-2)

在下面的代码段中,screen-shotssrc/test/resources下的文件夹,而Test类是src/test/java下的

import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

Resource fileResource = new ClassPathResource(
                "screen-shots/HomePage-attachment.png");

assertNotNull(fileResource);