Java 不带“的空格字符\&引用;在属性文件密钥中
I里德属性文件: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); 我的属性文件键包含空格,我需要输入\字符才能正确读取。是否可能不将\字符放在属性文件中并以正确的方式读取 属性文件内容:
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处理,我同意,可以以某种方式重新实现整个组件,但如果没有强有力的理由,我不推荐这种方法。。。