【问题标题】:How to remove the backslash from properties value in java [duplicate]如何从java中的属性值中删除反斜杠[重复]
【发布时间】:2017-02-11 04:37:30
【问题描述】:

我已阅读并尝试关注

还有很多博客,但都是为了从字符串中删除而不是为了属性文件

我正在尝试从属性文件值中删除 \ 但没有成功

这是我的config.properties 文件

query=select * from users
field=id

我的 Java 代码 A.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class A {

    public static void main(String[] args) throws IOException {
        String configPath = "/home/arif/util-test/config.properties";
        Properties prop = new Properties();
        FileInputStream configFileInputStream =  new FileInputStream(configPath);
        prop.load(configFileInputStream);
        System.out.println("Property file loaded "+ configPath);
        configFileInputStream.close();
        String query = prop.getProperty("query");
        query += " where " + prop.getProperty("field") + " = 1";
        //query = query.replaceAll("\\\\", "");
        query = query.replace("\\", "");
        prop.replace("query", query);
        prop.store(new FileOutputStream(configPath), null);
        System.out.println("updated query="+ query);
    }

}

并更新了config.properties 文件

#Mon Oct 03 14:34:27 IST 2016
query=select * from users where id \= 1
field=id

虽然我期待关注

#Mon Oct 03 14:34:27 IST 2016
query=select * from users where id = 1
field=id

并从终端或 cmd 获得预期输出,终端输出为

Property file loaded /home/arif/util-test/config.properties
updated query=select * from users where id = 1

您的帮助将不胜感激!谢谢

【问题讨论】:

  • @PeterLawrey,您在标记重复之前阅读过问题吗?
  • @PeterLawrey 这不是同一个主题,这里的问题是= 是属性文件中的特殊字符,因为它用于分割给定属性的键和值,例如它将始终使用反斜杠进行转义,但对于最终用户来说是完全透明的,因为调用 getProperty("query") 将返回不带反斜杠的值
  • 为什么要删除反斜杠,因为它对您来说是透明的?这只是一个实现细节
  • 谢谢@NicolasFilotto,我在想我不能用``但是当我再次加载它时它工作正常

标签: java properties-file


【解决方案1】:

您不能从属性文件中删除\ 的使用,因为这是定义要实现的属性文件的方式。

来自Properties的Javadoc

所有这些键终止字符都可以包含在键中,方法是用前面的反斜杠字符转义它们;例如,

\:\=

这一行

query=select * from users where id = 1

无效,因为它包含两个未转义的 = 字符。第二个需要转义。

您可以以不同的方式实现属性以不需要它,但它不是标准的属性文件。

存储属性的替代方法是 XML、JSON 和 YAML。我更喜欢 YAML,它通常更易于阅读。

Yaml 规范http://www.yaml.org/spec/1.2/spec.html

用于 YAML 的 Java 库 https://bitbucket.org/asomov/snakeyaml 这是一个很好的配置库。我会从这个开始。

【讨论】:

  • 感谢您的推荐,YAML 语法看起来确实比属性文件好
  • @ArifKhan 属性是为 Java 1.0 开发的,是内置但转储的。
  • @ArifKhan 添加了一些链接。
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 2018-07-26
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多