getPath()不返回斜杠? (视窗)

时间:2017-06-28 19:11:07

标签: java

我正在制作一个程序,涉及编辑文件并用路径替换占位符。

以下是代码:

List<String> lines = Files.readAllLines(new File(new File(basepath, "Game"), "launcher_profiles.json").toPath());
        int index = -1;
        for (String s : lines){
            index++;
            if (s.contains("PROGRAM/GAMEDIRPATH")) break;
        }

        String k = lines.get(index);
        k = k.replaceAll("PROGRAM/GAMEDIRPATH", new File(basepath, "Game").getPath());
        lines.set(index, k);
        clearFile(new File(new File(basepath, "Game"), "launcher_profiles.json"));
        Files.write(new File(new File(basepath, "Game"), "launcher_profiles.json").toPath(), lines, StandardOpenOption.CREATE);

basepath,“Game”文件路径没有问题,因为在我的程序中的每个其他位置,它都包含斜杠。只有在这部分中,它才会替换不包含斜杠的占位符。

例如,而不是 C:/ Users \ name \ Documents \ program \ Game,它返回UsersnameDocumentsprogramGame。

正如我之前所说,在所有其他地方,它返回正确的路径名(带斜杠)。 在Mac上,所有斜杠都在那里,即使在这部分也是如此。

有人知道修复吗?谢谢。

2 个答案:

答案 0 :(得分:4)

来自String.replaceAll方法的文档:

  

请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll。如果需要,使用Matcher.quoteReplacement来抑制这些字符的特殊含义。

答案 1 :(得分:1)

您已使用replaceAll方法将字符串的一部分替换为其他内容。我认为replaceAll方法的第一个参数采用字符串,但它被视为正则表达式,我认为参数中的斜杠&#34; PROGRAM / GAMEDIRPATH&#34;触发了一些事情。

只需删除replaceAll方法并使用replace方法,因为replace()方法将characterSequence作为参数。这不是替换所有字符串的解决方案,但至少你会知道原因。

    k = k.replace("PROGRAM/GAMEDIRPATH", new File(basepath, "Game").getPath());

编辑:你的代码在linux上工作正常,它显示k的值为 /家庭/用户名/文件/游戏

在Windows上,使用正则表达式时可能需要搜索转义字符