2013-07-12 3 views
0

Я пытаюсь переместить мою программу java в windows из linux и получаю всевозможные проблемы с файловыми путями.Экранирование обратных косых черт в пути к файлу в 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 (File.separator , «\\»)

но оба они в конечном итоге с подобной ошибкой:

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^

Кто-нибудь есть какие-либо идеи, что здесь происходит?

ответ

0

Попробуйте заменить слеша 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()); 
+0

Не-регулярное выражение способа отлично работает, спасибо! –

+0

Знаете ли вы, что Windows будет совершенно счастлива, если вы используете косые черты для разделения частей пути? Есть что-то об использовании обратной косой черты для сетевой части UNC-пути, хотя ... возможно, вам нужна часть «\\ Server1», чтобы иметь обратную косую черту. Я просто не могу вспомнить, что там есть. Даже тогда остальные могут использовать косые черты. –

Смежные вопросы