2013-07-12 79 views
0

我试图将我的java程序转移到Linux中的windows,并且正在获取文件路径的各种问题。在Java中的文件路径中转义反斜杠

最新的问题是这样的:

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); 

      .... 
} 

此功能是通过多次与从特定文件夹(备份\勘误的内容)的每个文件循环。

我提示以下错误:

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 7 Backup\Corrections\ ^ at java.util.regex.Pattern.error(Unknown Source)

我已经尝试添加 的replaceAll( “\\”, “\\\\”)后的getPath(),也的replaceAll(文件分割符,“\\”)

但他们都结束了一个类似的错误:

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Unexpected internal error near index 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()); 
+0

非正则表达式的方式完美的作品,谢谢! –

+0

您是否知道如果您使用斜杠来划分路径部分,Windows将会非常高兴?对于UNC路径的网络部分有一些使用反斜线,虽然...也许你需要“\\ Server1”部分有一个反斜杠。我只是不记得那里的问题。即使如此,其他人也可以使用斜杠。 –

相关问题