属性文件反斜杠和分号

时间:2013-08-01 09:53:58

标签: java properties

我有一个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 \\防病毒

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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

您可以检索密钥及其值并进行检查,但它不会在属性文件中发生变化 它看起来似乎有额外的斜线

答案 3 :(得分: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();