你如何逃避冒号(:)属性文件?你如何逃避冒号(:)属性文件?(How do you escape c

2019-05-14 10:38发布

我使用的是属性文件来存储我的应用程序的配置价值。 在实例中的一个,我得的值存储为xxx:yyy:zzz 。 当我这样做,结肠逃脱反斜杠\导致的价值表现为xxx\:yyy\:zzz的属性文件。

据我所知,冒号:是一个标准的分隔符Properties的Java类。 不过,我仍然需要保存的值,而不反斜杠\

如何处理这有什么建议?

Answer 1:

把属性到Properties的对象,并使用保存store(...)方法。 该方法将执行任何转义必需的。 在Java文档说:

” ......为重点,所有的空格字符都写前面都有一个\字符。对于元素,前导空格字符,但不嵌入或尾随空白字符前面都有一个\字符。键和元素字符#, !,=和:前面有一个反斜杠被写入,以确保它们是正确加载”

你只需要如果要创建/手写文件手动转义字符。


相反,如果你想包含转义冒号的文件,你的运气了。 这样的文件格式不正确,可能会不使用正确加载Properties.load(...)方法。 如果你沿着这条路走下去,你需要实现自己的自定义负载和/或存储的方法。



Answer 2:

我碰到了同样的问题。 斜杠/还获得由逃脱store()的方法Properties

我创造我自己的解决了这个问题CustomProperties类(延伸java.util.Properties )和注释掉调用saveConvert()customStore0()方法。

这里是我的CustomProperties类:

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;

public class CustomProperties extends Properties {
  private static final long serialVersionUID = 1L;
  @Override
  public void store(OutputStream out, String comments) throws IOException {
      customStore0(new BufferedWriter(new OutputStreamWriter(out, "8859_1")),
                   comments, true);
  }
  //Override to stop '/' or ':' chars from being replaced by not called 
  //saveConvert(key, true, escUnicode)
  private void customStore0(BufferedWriter bw, String comments, boolean escUnicode)
          throws IOException {
      bw.write("#" + new Date().toString());
      bw.newLine();
      synchronized (this) {
          for (Enumeration e = keys(); e.hasMoreElements();) {
              String key = (String) e.nextElement();
              String val = (String) get(key);
              // Commented out to stop '/' or ':' chars being replaced
              //key = saveConvert(key, true, escUnicode);
              //val = saveConvert(val, false, escUnicode);
              bw.write(key + "=" + val);
              bw.newLine();
          }
      }
      bw.flush();
  }
}


Answer 3:

我们一前两天打了这个问题。 我们在操纵现有的属性文件与网址做为值。

这是有风险的,但如果你的财产值少于40个字符,那么你可以用它代替“存储”的“名单”的方法:

http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#list(java.io.PrintWriter)

我们有一个快速浏览一下JDK代码和黑客攻击了商店的自定义实现,对于我们的目的,工作原理:

public void store(Properties props, String propertyFilePath) throws FileNotFoundException {
    PrintWriter pw = new PrintWriter(propertyFilePath); 
    for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
        String key = (String) e.nextElement();
        pw.println(key + "=" + props.getProperty(key));
    }
    pw.close();
}


Answer 4:

如果使用属性文件的XML变种(使用loadFromXMLstoreToXML )这不应该是一个问题。



Answer 5:

它的简单,只需使用撇号 '在那里如:

取而代之的是(情况1)

File file= new File("f:\\properties\\gog\\esave\\apple");
prop.setProperty("basedir",flie.toString());

使用这个(情况2)

File file= new File("f':'\\properties\\gog\\esave\\apple");
prop.setProperty("basedir",flie.toString());

输出将被


情况1:BASEDIR = F:\性能\高格\ esave \苹果

情况2:BASEDIR = F:\性能\高格\ esave \苹果

我希望这能帮到您



文章来源: How do you escape colon (:) in Properties file?