0

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

最新的问题是这样的:

公共无效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:在 java.util.regex.Pattern.error 的索引 7 Backup\Corrections\ ^ 附近存在非法/不受支持的转义序列。错误(未知来源)

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

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

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

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

4

1 回答 1

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());
于 2013-07-12T16:32:11.207 回答