在Java属性文件中存储十六进制值时不带"\&引用;

在Java属性文件中存储十六进制值时不带"\&引用;,java,properties,Java,Properties,我试图在属性文件中添加十六进制值,该值正在存储,但我可以看到添加了一个“\”,这是我不想要的 测试属性 # #Fri Jun 07 21:18:49 GMT+05:30 2013 test=fe\:fe Java文件 public class PropertySave { private static File s_file; private static Properties s_properties = new Properties(); public static

我试图在属性文件中添加十六进制值,该值正在存储,但我可以看到添加了一个“\”,这是我不想要的

测试属性

#
#Fri Jun 07 21:18:49 GMT+05:30 2013
test=fe\:fe
Java文件

public class PropertySave {
    private static File s_file;
    private static Properties s_properties = new Properties();
    public static void main(String[] args) {
        loadProperties();
        s_properties.setProperty("test", "fe:fe");
        saveProperties();
    }
    private static void saveProperties() {
        FileOutputStream fout = null;
        try {
            fout = new FileOutputStream(s_file);
            s_properties.store(fout, "");
        } catch (IOException ioe) {
            ioe.printStackTrace();
            System.exit(1);
        } finally {
            if (fout != null) {
                try {
                    fout.close();
                } catch (final IOException ioe2) {
                    ioe2.printStackTrace();
                    System.exit(1);
                }
            }
        }
    }
    private static void loadProperties() {
        s_file = new File("test.properties");
        if ((!s_file.exists()) || (!s_file.isFile())) {
            System.exit(1);
        }
        FileInputStream fin = null;
        try {
            fin = new FileInputStream(s_file);
            s_properties.load(fin);
        } catch (IOException ioe) {
            ioe.printStackTrace();
            System.exit(1);
        } finally {
            if (fin != null) {
                try {
                    fin.close();
                } catch (final IOException ioe2) {
                    ioe2.printStackTrace();
                    System.exit(1);
                }
            }
        }
    }
}
在java文件中,s_properties.setProperty(“test”,“fe:fe”)属性文件中的输出不同(test.properties)fe:fe我想忽略这一点,因为此属性文件是用“C”语言输入到其他系统的,因此我的东西无法工作


我应该如何确保java文件中的输入和properties文件中的输出与properties类存储的相同

:使用前面的\以确保在使用load方法时再次加载正确的值。如果您希望以后能够将这个属性文件加载回java,那么恐怕您的属性文件中的转义字符就太多了。请参见Properties类stores:with The previous\以确保在使用load方法时它将再次加载正确的值。如果您希望以后能够将这个属性文件加载回java,那么恐怕您的属性文件中的转义字符就太多了。请参见

考虑以已知方式编码十六进制值,并用C和Java对其进行解码

一种技术是在十六进制值之前加上“0x”,并对数字使用所有大写字母。 如果你使用这种技术,你将需要某种方法来发出十六进制数结束的信号。 我建议使用空格字符(“”)或行尾

使用此技术,您的属性将如下所示:

test=0xFEFE

字符串“blamm07kapow”,其中07是十六进制数,如下所示:


bum0x07 kapow

考虑以已知方式编码十六进制值,并用C和Java对其进行解码

一种技术是在十六进制值之前加上“0x”,并对数字使用所有大写字母。 如果你使用这种技术,你将需要某种方法来发出十六进制数结束的信号。 我建议使用空格字符(“”)或行尾

使用此技术,您的属性将如下所示:

test=0xFEFE

字符串“blamm07kapow”,其中07是十六进制数,如下所示:


bum0x07 kapow

冒号是属性逻辑的特殊字符——它是属性文件中键和值之间的分隔符。因此,如果您想要一个带有冒号的值,它必须以“转义”形式存储在属性文件中。如果您不想这样做,请不要使用Java属性机制来编写文件。@HotLicks谢谢,转义形式示例如下?如果我给这个“fe\\\:fe”,输出是“fe\\\:fe”。我的输入和输出必须匹配,我现在无法更改java属性机制,因为您想要的太多了。您正在要求属性机制执行一些它不是设计用来执行的操作。冒号是属性逻辑的特殊字符--它是属性文件中键和值之间的分隔符。因此,如果您想要一个带有冒号的值,它必须以“转义”形式存储在属性文件中。如果您不想这样做,请不要使用Java属性机制来编写文件。@HotLicks谢谢,转义形式示例如下?如果我给这个“fe\\\:fe”,输出是“fe\\\:fe”。我的输入和输出必须匹配,我现在无法更改java属性机制,因为您想要的太多了。您正在要求属性机制执行一些它不是设计用来执行的操作。感谢前面的\throws编译错误“s_properties.setProperty(“test”,“fe\”);“throws编译错误如果您在实际代码中的:前面加上\,则它认为您试图使用Java转义字符,但它可能没有\:的转义序列\:只是用于存储和加载文件属性的转义字符。如果属性中不一定需要冒号(例如,将属性文件读入另一种编程语言),那么我建议使用DwB的解决方案,由于大多数语言都理解表示法0x123defThank中的十六进制值,因此属性类将“:”替换为“\:”,对于所有不特定于十六进制的值,对于外部系统,该值总是错误的。是否有任何方法将属性值升级?Thank Previous\引发编译错误“s_properties.setProperty(“测试”,“fe\”fe”);“抛出编译错误如果在实际代码中,您在:前面加了\,那么它认为您正在尝试使用Java转义字符,但它可能没有转义序列\:的转义序列\:只是用于存储和加载文件属性的转义字符。如果您在属性中不一定需要冒号(假设您正在将属性文件读入另一种编程语言),那么我建议使用DwB的解决方案,因为大多数语言都理解表示法0x123def中的十六进制值。谢谢,它看起来像“:”被“\”替换:根据property类,对于所有不特定于十六进制的值,对于外部系统,该值总是错误的。是否有任何方法可以提升该属性值?谢谢,看起来PropertyClass将所有出现的“:”替换为“\:”不管十六进制值是什么,它会给C这样的外部系统带来问题,有没有解决办法谢谢,看起来PropertyClass会用“\:”替换所有出现的“:”不管十六进制值是什么,它会给C这样的外部系统带来问题,有没有解决办法