当您输入URL作为Properties类的值时,它似乎不会将其作为文字字符串。
以下是一些代码:
package sandbox2;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Scanner;
import java.util.TreeSet;
public class Sandbox2
{
static Scanner keyboard;
public static void main(String[] args)
{
Properties p = new Properties()
{
@Override
public synchronized Enumeration<Object> keys()
{
return Collections.enumeration(new TreeSet<>(super.keySet()));
}
};
keyboard = new Scanner(System.in);
for (int i = 0; i < 3; i++)
{
String s = askForProperty("Enter value for " + i + ": ");
p.setProperty("Website." + i, s);
}
try
{
String fileLocation = "C:\\Test\\test.properties";
FileOutputStream f = new FileOutputStream(fileLocation);
p.store(f, null);
f.close();
System.out.println("Saved file at: " + fileLocation);
}
catch (IOException e) { }
keyboard.close();
}
private static String askForProperty(String message)
{
System.out.print(message);
return keyboard.nextLine();
}
}
以下是程序输出,以及我的键盘输入:
run:
Enter value for 0: http://www.gmail.com
Enter value for 1: http://www.google.com/
Enter value for 2: http://www.stackoverflow.com/
Saved file at: C:\Test\test.properties
BUILD SUCCESSFUL (total time: 24 seconds)
.properties文件的内容如下:
#Tue Feb 11 13:09:31 CST 2014
Website.0=http\://www.gmail.com
Website.1=http\://www.google.com/
Website.2=http\://www.stackoverflow.com/
为什么要添加额外的正斜杠?有什么理由需要“逃避”冒号角色吗?我怎样才能让Properties类按字面解释我的字符串,而不添加字符?
答案 0 :(得分:3)
:
和=
中的字符用作键/值分隔符。只要它们使用\
(也就是反斜杠)进行转义,它们就可以在密钥中使用。来自java.util.Properties
documentation:
该键包含从第一个非空格字符开始的行中的所有字符,但不包括第一个未转义的'=',':'或除行结束符之外的空格字符。 。所有这些关键终止字符都可以通过使用前面的反斜杠字符
转义它们来包含在密钥中
它们实际上并不需要在值中进行转义,但如果它们存在则可以。 java.util.Properties
的实现可能是为了安全起见,或者因为它使代码更简单。
在任何情况下,你的意思是它不是字面上解释你的字符串是不正确的。如果您使用java.util.Properties
重新阅读该文件,您将获得没有任何额外反斜杠的字符串。
答案 1 :(得分:0)
Properties
文件确实按字面解释字符串。例如,您可以使用equals()
对其进行测试。 .properties
文件格式必须转义分号,但如果您在Java中操作属性,则不会影响您的代码。