Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带“的空格字符\&引用;在属性文件密钥中_Java - Fatal编程技术网

Java 不带“的空格字符\&引用;在属性文件密钥中

Java 不带“的空格字符\&引用;在属性文件密钥中,java,Java,I里德属性文件: InputStream input = new FileInputStream("data.ini"); Reader reader = new InputStreamReader(input, Charset.forName("UTF-8")); Properties prop = new Properties(); prop.load(reader); 我的属性文件键包含空格,我需要输入\字符才能正确读取。是否可能不将\字符放在属性文件中并以正确的方式读取 属性文件内容:

I里德属性文件:

InputStream input = new FileInputStream("data.ini");
Reader reader = new InputStreamReader(input, Charset.forName("UTF-8"));
Properties prop = new Properties();
prop.load(reader);
我的属性文件
包含空格,我需要输入
\
字符才能正确读取。是否可能不将
\
字符放在属性文件中并以正确的方式读取

属性文件内容:

aaa\ bbb=0
如JavaDoc中所述:

该键包含行中的所有字符,从第一个非空格字符开始,直到但不包括第一个未转义的“=”、“:”、或空格字符,而不是行终止符

所以答案是否定的

通常键包含其他分隔符,我的经验是使用了

aaa.bbb=0

您可以使用Java Unicode转义属性文件中的所有内容,
\u0020对于空白,使用它您的问题将得到解决。

它不像使用内置读卡器那样干净,但可以使用以下代码

public static Properties load(File file) throws IOException {
    InputStream input = new FileInputStream(file);
    Reader reader = new InputStreamReader(input, StandardCharsets.UTF_8);
    Properties p;
    try (BufferedReader br = new BufferedReader(reader)) {
        p = new Properties();
        String line;
        while ((line = br.readLine()) != null) {
            int index = line.indexOf('=');
            if (index > 0) {
                String key = line.substring(0, index).trim();
                String value = line.substring(index + 1).trim();
                p.put(key, value);
            }
        }
    }
    return p;
}

也可以从XML文件加载属性。。。使代码更整洁

properties.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>Sample Properties file in XML</comment>
    <entry key="PropertyWithoutSpaces">Property value</entry>
    <entry key="Property With Spaces">Property value</entry>
</properties>
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class PropertyTest {

    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.loadFromXML( new FileInputStream("properties.xml") );

        System.out.println( properties.getProperty("Property With Spaces") );
        System.out.println( properties.getProperty("PropertyWithoutSpaces") );
    }

}

我记得处理windows文件路径分隔器时,首先将文件作为原始内容读取,然后处理转义逻辑,然后通过输入流将其馈送到属性。因此,C:\windows可以读取为C:\windows,而不是C:windows。同样的逻辑也可以使用,文件可以留有“空格”,但在将其提供给属性classI之前必须用java处理,我同意,可以以某种方式重新实现整个组件,但如果没有强有力的理由,我不推荐这种方法。。。