值未在属性文件中正确设置

时间:2017-09-10 06:50:10

标签: java properties fileinputstream fileoutputstream properties-file

我有一个属性文件(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 \ :.任何人都可以指导我吗?

2 个答案:

答案 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 。 我不知道它如何与转义符号一起使用,但也许这个例子可以给你和想法。

在现实生活中,如果我有这样的要求,我会覆盖BuffereReaderBufferedWriter并使用标准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));

    }