0

Java プログラムを Linux から Windows に移行しようとしていますが、ファイルパスに関するあらゆる種類の問題が発生しています。

最新の問題はこれです:

public void restoreCorrections(ファイル修正ディレクトリ) {

String filePath = correctionDir.getPath().replaceFirst("Backup" + File.separator + "Corrections" + File.separator, 
          "Data" + File.separator + "Matches" + File.separator);      System.out.println(filePath);

            ....
}

この関数は、特定のフォルダー (backup\corrections) の各ファイルに対して何度もループします。

次のエラーが表示されます。

スレッド「AWT-EventQueue-0」での例外 java.util.regex.PatternSyntaxException: java.util.regex.Pattern.error のインデックス 7 の Backup\Corrections\ ^ 付近で無効な/サポートされていないエスケープ シーケンス (不明なソース)

getPath() の後に replaceAll("\\", "\\\\") と replaceAll(File.separator, "\\") を追加しようとしました

しかし、どちらも同様のエラーになります。

スレッド「AWT-EventQueue-0」での例外 java.util.regex.PatternSyntaxException: インデックス 1 付近で予期しない内部エラーが発生しました \ ^

ここで何が起こっているのか誰にも分かりますか?

4

1 に答える 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());
于 2013-07-12T16:32:11.207 に答える