2011-01-22 42 views
0

我有一個在後端數據庫中稱爲'路徑'的字段,它存儲了某些資源的路徑。我的想法是讓用戶輸入具有特定字符的路徑作爲文件分隔符(獨立於OS),而不是爲windows路徑存儲大量反斜槓(轉義)路徑。使用java.regex替換字符File.separator模式匹配器

例如:

原始路徑:

\\\\server\\share\\ 

與逃脫路徑DB:

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

,而不是我想:

%%server%share% 

,後來我想替換那些java的File.separator爲真實的東西。對於這項工作,我發現最快的解決方案是使用java.regex模式匹配器。

我對這份工作的功能是:

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

,但本該是拯救生命與

java.lang.StringIndexOutOfBoundsException尋釁滋事同一文件分割符:字符串索引超出範圍:1

我已與其他字符測試(例如:取代「%」與「q」),並且該功能工作正常,但File.separator"\\\\"作爲替換字符串不起作用。

我想知道它有這方面的解決方法。或者更好,更簡單和優雅的解決方案

+0

`字符串項replacestr =文件分割符+文件分割符,'這將工作:) – 2011-01-22 11:37:27

回答

0
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("%%", "//"); 
} 
3

我想你應該存儲的URI在數據庫中,因爲它們是獨立的平臺。

實施例,在視窗

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

大,我從來不知道:) – 2011-01-22 11:32:51