我有一个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 \\防病毒
如何删除这些额外的反斜杠?
答案 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();