在Java中的文件路径中转义反斜杠

时间:2013-07-12 16:27:47

标签: java escaping

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

最新的问题是:

  

public void restoreCorrections(File correctionDir){

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

            ....
}

此功能与特定文件夹(backup \ corrections)中的每个文件一起循环多次。

我收到以下错误:

  

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

我尝试过添加     在getPath()之后替换所有(“\\”,“\\\\”)以及replaceAll(File.separator,“\\”)

但他们最终都有类似的错误:

  

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

任何人都知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

尝试将第一个参数中的反斜杠替换为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());