输入URL时添加字符的Java Properties Class

时间:2014-02-11 19:48:04

标签: java properties escaping

当您输入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类按字面解释我的字符串,而不添加字符?

2 个答案:

答案 0 :(得分:3)

:=中的字符用作键/值分隔符。只要它们使用\(也就是反斜杠)进行转义,它们就可以在密钥中使用。来自java.util.Properties documentation

  

该键包含从第一个非空格字符开始的行中的所有字符,但不包括第一个未转义的'=',':'或除行结束符之外的空格字符。 。所有这些关键终止字符都可以通过使用前面的反斜杠字符

转义它们来包含在密钥中

它们实际上并不需要在值中进行转义,但如果它们存在则可以。 java.util.Properties的实现可能是为了安全起见,或者因为它使代码更简单。

在任何情况下,你的意思是它不是字面上解释你的字符串是不正确的。如果您使用java.util.Properties重新阅读该文件,您将获得没有任何额外反斜杠的字符串。

答案 1 :(得分:0)

Properties文件确实按字面解释字符串。例如,您可以使用equals()对其进行测试。 .properties文件格式必须转义分号,但如果您在Java中操作属性,则不会影响您的代码。