我有一个属性文件(ab.properties),其值低于:
颜色=橙
storeLocation =。/ test.json
公司=苹果
我想将storeLocation的值修改为C:\ Users \ kumar \ testFiles \ test.json
在代码中,file是我从中读取ab.properties文件的路径,storelocation1包含路径C:\ Users \ kumar \ testFiles \ test.json(我想在storelocation中更新)。见下面的代码:
try (InputStream in = new FileInputStream(file)) {
Properties prop = new Properties();
prop.load(in);
in.close();
prop.setProperty("storeLocation", storeLocation1);
OutputStream out = new FileOutputStream(file);
prop.store(out, null);
out.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用上面的代码我得到以下输出:
颜色=橙
storeLocation = C \:\\用户\\库马尔\\ testFiles \\ test.json
公司=苹果
storeLocation的值正在更新,但
我想C:不是C \ :.任何人都可以指导我吗?
答案 0 :(得分:0)
您可以使用以下方法准备属性文件:
public static Properties load(File file) throws IOException {
try (BufferedReader in = new BufferedReader(new FileReader(file))) {
int pos;
String line;
Properties properties = new Properties();
while ((line = in.readLine()) != null) {
if (!line.startsWith("#")) {
if ((pos = line.indexOf('=')) > 0) {
String key = line.substring(0, pos).trim();
String val = line.substring(pos + 1).trim();
properties.setProperty(key, val);
}
}
}
return properties;
}
}
并保存属性文件:
public static Properties store(File file, Properties properties) throws IOException {
try (BufferedWriter out = new BufferedWriter(new FileWriter(file, false))) {
Enumeration<String> names = (Enumeration<String>)properties.propertyNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
String val = properties.getProperty(key);
out.write(String.format("%s = %s", key, val));
out.newLine();
}
}
return properties;
}
在这种情况下,在Properties
和文件中你使用完全相同的字符串: C:\ Users \ kumar \ testFiles \ test.json 。
我不知道它如何与转义符号一起使用,但也许这个例子可以给你和想法。
在现实生活中,如果我有这样的要求,我会覆盖BuffereReader
和BufferedWriter
并使用标准Properties.load()
和Properties.store()
方法。
答案 1 :(得分:0)
目前,我正在使用以下解决方案,这对我来说现在起作用了:
try (InputStream in = new FileInputStream(file)) {
properties prop = new Properties();
prop.load(in);
in.close();
prop.setProperty("storeLocation", storeLocation1);
OutputStream out = new FileOutputStream(file);
prop.store(out, null);
out.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
updateString(file);
}
public static void updateString(File file) throws IOException {
Path path = Paths.get(file.toString());
Charset charset = StandardCharsets.UTF_8;
String content = new String(Files.readAllBytes(path), charset);
content = content.replace("\\" + ":", ":");
Files.write(path, content.getBytes(charset));
}