.proprties 文件中的反斜杠 (\) 被 Spring 的“环境”变量忽略

问题描述 投票:0回答:4

我正在尝试使用

@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

但它仍然只是忽略值字符串中的 \ 。 另外,我不能使用正斜杠代替反斜杠。

你能帮我解决这个问题吗?预先感谢!

java spring spring-annotations spring-web
4个回答
1
投票

我没有用反斜杠,而是用正斜杠将它们存储在配置文件中。

在阅读时,我用双反斜杠替换了它们。

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("/", "\\\\");

这对我来说是正确的。


0
投票

这是一个真正丑陋的黑客,但您可以尝试对符号“\”(即“\u005c”)使用unicode转义序列,因此使用“abc\u005cxyz”代替字符串值“abc\xyz”。但它会再次将其转换为“abc\xyz”,然后将“\”视为转义符号的开始。因此,如果第一个不起作用,您可以尝试将“abc\xyz”替换为“abc\u005c\u005cxyz”。看看第一个或第二个选项是否适合您。但事实上,我很惊讶简单的转义“\”并没有解决你的问题。另外,如果全部失败,请尝试此“abc\\xyz” - 这是双重转义。


0
投票

我使用了 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"));   
    }   
}

0
投票

一种可能的解决方案是将文本换行为

服务器名称 = '[abc\xyz]'

© www.soinside.com 2019 - 2024. All rights reserved.