0

特定のリソースへのパスを格納するバックエンド データベースに「パス」というフィールドがあります。Windowsパスのバックスラッシュ(エスケープ)パスを多数保存する代わりに、ユーザーがファイルセパレータとして特定の文字を使用してパスを入力できるようにすることを考えています(OSに依存しません)。

例えば:

元のパス:

\\\\server\\share\\

db にエスケープされたパスを使用:

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

代わりに私が欲しい:

%%server%share%

File.separatorそして後で、それらを本物のJavaのものに置き換えたいと思いました。この仕事では、私が見つけた最も迅速な解決策は、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;
}

しかし、命を救うはずだった同じ File.separator が問題を引き起こしています

java.lang.StringIndexOutOfBoundsException: 文字列インデックスが範囲外です: 1

私は他の文字でテストしました (例: '%' を 'q' に置き換えます)。この関数は正常に動作しますがFile.separator"\\\\"文字列の置換は機能しません。

これには回避策があることを知りたいです。または、より簡単でエレガントなソリューションです。

4

2 に答える 2

3

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"));
于 2011-01-22T11:30:38.323 に答える
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("%%", "//");
}
于 2011-01-22T11:14:53.987 に答える