我正在尝试使用
@Configuration
和 @PropertySource
变量在 Spring Environment
java 类中加载 config.proprties 文件数据。
示例:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html 问题是,我有一个具有如下价值的财产:
serverName = abc\xyz
当我使用方法读取这个属性时,
String server= env.getProprty("serverName");
System.out.print(server);
值打印为“abcxyz”。
请注意,我尝试使用双反斜杠,
serverName = abc\\xyz
但它仍然只是忽略值字符串中的 \ 。 另外,我不能使用正斜杠代替反斜杠。
你能帮我解决这个问题吗?预先感谢!
我没有用反斜杠,而是用正斜杠将它们存储在配置文件中。
在阅读时,我用双反斜杠替换了它们。
SourcePath=C:/Users/Barani/Documents/SampleData/MyInputFile.txt
Path currentRelativePath = Paths.get("");
String filePath = currentRelativePath.toAbsolutePath().toString() + "/config.properties";
Properties props = new Properties();
FileInputStream fis = new FileInputStream(filePath);
props.load(fis);
sourcePath = props.getProperty("SourcePath").replace("/", "\\\\");
这对我来说是正确的。
这是一个真正丑陋的黑客,但您可以尝试对符号“\”(即“\u005c”)使用unicode转义序列,因此使用“abc\u005cxyz”代替字符串值“abc\xyz”。但它会再次将其转换为“abc\xyz”,然后将“\”视为转义符号的开始。因此,如果第一个不起作用,您可以尝试将“abc\xyz”替换为“abc\u005c\u005cxyz”。看看第一个或第二个选项是否适合您。但事实上,我很惊讶简单的转义“\”并没有解决你的问题。另外,如果全部失败,请尝试此“abc\\xyz” - 这是双重转义。
我使用了 spring 3.1.4-RELEASE,如果属性文件中的值包含“\”,它就可以工作。就像服务器名称 = abc\xyz
package com.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
@Configuration
@PropertySource("app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public String myBean() {
System.out.println(env.getProperty("serverName"));
return new String(env.getProperty("serverName"));
}
}
一种可能的解决方案是将文本换行为
服务器名称 = '[abc\xyz]'