Замена символа с File.separator с помощью java.regex Pattern Matcher - PullRequest
0 голосов
/ 22 января 2011

У меня есть поле с именем 'path' в серверной базе данных, в котором хранится путь к определенному ресурсу. Вместо того, чтобы хранить множество путей с обратной косой чертой (экранированных) для пути Windows, моя идея - позволить пользователю вводить путь с определенным символом в качестве разделителя файлов (независимо от ОС).

Например:

оригинальный путь:

\\\\server\\share\\

с экранированным путем в БД:

\\\\\\\\server\\\\share\\\\

вместо этого я хочу:

%%server%share%

и позже я хотел заменить их на Java 1014 * для реальных вещей. Для этой работы самым быстрым решением, которое я нашел, является использование java.regex Pattern Matcher.

Моя функция для этой работы:

private String convertToRealPathFromDB(String pth) {
    String patternStr = "%";
    String replaceStr = File.separator;
    String convertedpath;


    //Compile regular expression
    Pattern pattern = Pattern.compile(patternStr); //pattern to look for

    //replace all occurance of percentage character to file separator
    Matcher matcher = pattern.matcher(pth);
    convertedpath = matcher.replaceAll(replaceStr);

    System.out.println(convertedpath);

    return convertedpath;
}

но тот же File.separator, который должен был спасти жизнь, создает проблемы с

java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 1

Я проверил другие символы (например: заменим '%' на 'q'), и эта функция работает нормально, но File.separator и "\\\\", так как строка замены не работает.

Мне нравится знать, что для этого есть обходной путь. Или лучше, проще и элегантнее.

Ответы [ 2 ]

3 голосов
/ 22 января 2011

Я думаю, вы должны хранить URI в вашей базе данных, потому что они не зависят от платформы.

Пример, в Windows :

File f = new File("C:\\temp\\file.txt");
System.out.println(f.toURI());

печать

file:/C:/temp/file.txt

Вкл. Unix :

File f = new File("/path/to/file.txt");
System.out.println(f.toURI());

печать

file:/path/to/file.txt

Чтобы преобразовать URI в файл:

File f = new File(new URI("file:/C:/temp/file.txt"));
0 голосов
/ 22 января 2011
 String str = " \\server\\share\\";
 String result = str.replaceAll("\\\\", "%%");
 System.out.println(result);

Выход

 %%server%%share%%

и обратно

String path=null;
if (File.separator.equals("\\")) {
    path = result.replaceAll("%%", "\\\\");
} else {
    path = result.replaceAll("%%", "//");
}
...