属性文件反斜杠和分号

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

我有一个Java类来编写/追加到现有的属性文件中。附加后,它用双反斜杠替换所有单反斜杠,并在每个分号前放置单反斜杠。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  response.setContentType("text/html");
  PrintWriter out= response.getWriter();
  String systemPath=request.getParameter("SYSTEMPATH");
  String deployPath = getServletConfig().getServletContext().getRealPath("/WEB-INF/DB.properties");
  InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/DB.properties");
  Properties prop = new Properties();
  prop.load(stream);
  prop.setProperty("Workspace", systemPath);
  File file = new File(deployPath);
  FileOutputStream fileOut = new FileOutputStream(file);
  prop.store(fileOut, "sample properties");
  fileOut.close();
}

在追加之前:

URL = JDBC:预言:瘦:@ // 192.168.1.22:1521/

工作区= d:\ RACHEL \ SW \防病毒

追加后:

URL = JDBC:预言:瘦:@ // 192.168.1.22:1521/

工作区= d:\\ RACHEL \\ SW \\防病毒

如何删除这些额外的反斜杠?

java properties
4个回答
3
投票

属性文件应该有额外的反斜杠开头。特别是,如果没有它们,您可能会得到错误的数据,例如:如果你有d:\foo\new,这并不意味着你的期望。

反斜杠基本上转义属性文件中敏感的字符。冒号是不必要的(因为它们不在钥匙中),但它们也没有任何伤害。文本反斜杠加倍是完全有益的。

这在Properties文档中有记录 - 特别是,请查看您正在调用的store()方法。


2
投票

属性文件有their own format。冒号和反斜杠是属性文件中的特殊字符。所以,他们必须逃脱。另请参阅Properties.load()文档。

如果您使用Properties类来编写和读取文件,则不会有任何问题。但是,如果使用Property类编写属性文件,并使用其他方法读取,则必须手动处理转义。


0
投票

你可以检索密钥及其值并检查,它不会改变,但在属性文件中似乎看起来有额外的斜杠


0
投票

我有同样的问题,因为我在另一个问题上的stackoverflow。我记得有过这段代码!我希望它有所帮助,至少它是java,但它确实逃避了属性文件反斜杠和分号陷阱中的问题。

  // load to store prop
  @SuppressWarnings ( "resource" )
  PrintWriter pw = new PrintWriter( configFile );
  pw.println( "#" + LocalDateTime.now() );
  pw.println( "hibernate.connection.username=" +  prop.getProperty( "hibernate.connection.username" ) );
  pw.println( "hibernate.connection.password=" + prop.getProperty( "hibernate.connection.password" ) );
  pw.println( "hibernate.connection.url=" + prop.getProperty( "hibernate.connection.url" ) );
  pw.close();
© www.soinside.com 2019 - 2024. All rights reserved.