我正在尝试将我的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 \ ^
任何人都知道这里发生了什么?
答案 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());