【问题标题】:Escaping backslashes in a filepath in Java在Java中的文件路径中转义反斜杠
【发布时间】:2013-07-11 06:32:38
【问题描述】:

我正在尝试将我的 java 程序从 linux 移动到 windows 并且遇到文件路径的各种问题。

最新的问题是这样的:

public void restoreCorrections(文件更正目录) {

String filePath = correctionDir.getPath().replaceFirst("Backup" + File.separator + "Corrections" + File.separator, 
          "Data" + File.separator + "Matches" + File.separator);      System.out.println(filePath);

            ....
}

此函数循环多次,每个文件来自特定文件夹(备份\更正)。

我收到以下错误:

线程“AWT-EventQueue-0”中的异常 java.util.regex.PatternSyntaxException:非法/不受支持的转义 索引 7 附近的序列 备份\更正\ ^ 在 java.util.regex.Pattern.error(Unknown Source)

我已经尝试添加 在 getPath() 之后 replaceAll("\\", "\\\\") 和 replaceAll(File.separator, "\\")

但它们最终都出现了类似的错误:

线程“AWT-EventQueue-0”中的异常 java.util.regex.PatternSyntaxException:附近出现意外的内部错误 索引 1 \ ^

有人知道这里发生了什么吗?

【问题讨论】:

    标签: java escaping


    【解决方案1】:

    尝试将第一个参数中的反斜杠替换为replaceFirst

    String filePath = correctionDir.getPath().replaceFirst(("Backup" + File.separator + "Corrections" + File.separator).replaceAll("\", "\\"), 
            "Data" + File.separator + "Matches" + File.separator);
    

    该参数是一个正则表达式,并被传递给Pattern

    另外,如果分隔符是反斜杠,您只想用双反斜杠替换反斜杠。如果它是斜线(如在 Windows 中),则保留它。

    您也可以使用非正则表达式解决方案:

    String original = "Backup" + File.separator + "Corrections" + File.separator;
    int col = correctionDir.indexOf(original);
    String filePath = correctionDir.substring(0, col) + "Data" + File.separator + "Matches" + File.separator + correctionDir.substring(col + original.length());
    

    【讨论】:

    • 您知道如果您使用斜线来划分路径部分,Windows 会非常高兴吗?不过,有一些关于在 UNC 路径的网络部分使用反斜杠的问题……也许您需要在“\\Server1”部分使用反斜杠。我只是不记得那里的问题。即使这样,其余的也可以使用斜线。
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 2013-07-23
    • 2017-03-16
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2013-12-05
    • 2016-11-20
    相关资源
    最近更新 更多