3

我有一个 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:oracle:thin:@//192.168.1.22:1521/

工作区=D:\RACHEL\SW\Antivirus

附加后:

url=jdbc:oracle:thin:@//192.168.1.22:1521/

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

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

4

4 回答 4

3

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

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

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

于 2013-08-01T09:58:55.423 回答
2

属性文件有自己的格式冒号反斜杠是属性文件中的特殊字符。所以,他们必须逃脱。另请查看属性。load()文档。

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

于 2013-08-01T10:00:45.770 回答
0

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

于 2013-08-01T10:09:29.373 回答
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();
于 2017-07-20T17:04:15.787 回答