我在(\+?\s*[0-9]+\s*)+
从 java 中的属性文件中读取值时遇到问题,因为我使用getProperty()
方法得到的值是(+?s*[0-9]+s*)+
.
转义属性文件中的值还不是一种选择。
有任何想法吗?
我在(\+?\s*[0-9]+\s*)+
从 java 中的属性文件中读取值时遇到问题,因为我使用getProperty()
方法得到的值是(+?s*[0-9]+s*)+
.
转义属性文件中的值还不是一种选择。
有任何想法吗?
我认为这个类可以解决属性文件中的反斜杠问题。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
public class ProperProps {
HashMap<String, String> Values = new HashMap<String, String>();
public ProperProps() {
};
public ProperProps(String filePath) throws java.io.IOException {
load(filePath);
}
public void load(String filePath) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().length() == 0 || line.startsWith("#"))
continue;
String key = line.replaceFirst("([^=]+)=(.*)", "$1");
String val = line.replaceFirst("([^=]+)=(.*)", "$2");
Values.put(key, val);
}
reader.close();
}
public String getProperty(String key) {
return Values.get(key);
}
public void printAll() {
for (String key : Values.keySet())
System.out.println(key +"=" + Values.get(key));
}
public static void main(String [] aa) throws IOException {
// example & test
String ptp_fil_nam = "my.prop";
ProperProps pp = new ProperProps(ptp_fil_nam);
pp.printAll();
}
}
我回答这个问题已经很晚了,但也许这可以帮助到这里的其他人。
较新版本的 Java(不确定是哪个,我使用的是 8)支持通过使用来表示我们习惯\\
的正常值来转义值。\
例如,在您的情况下,(\\+?\\s*[0-9]+\\s*)+
就是您要查找的内容。
只需使用经典阅读即可BufferedReader
:
final URL url = MyClass.class.getResource("/path/to/propertyfile");
// check if URL is null;
String line;
try (
final InputStream in = url.openStream();
final InputStreamReader r
= new InputStreamReader(in, StandardCharsets.UTF_8);
final BufferedReader reader = new BufferedReader(r);
) {
while ((line = reader.readLine()) != null)
// process line
}
如有必要,适应 Java 6...