非常に小さく単純な問題がありますが、解決策がありません。実際、ファイルチューザーを使用してCSVファイルパスを取得しています。このcsvファイルのデータを、データのローカルローカルファイルクエリを使用してデータベースに入力しています。
入力したファイルパスが "C:\ title.csv"であるとします。この文字列をクエリに挿入すると、パスに\ tの組み合わせが表示されます。これは実際にはファイルパスの一部であり、エスケープ文字 '\ t'ではありません。しかし、Javaとmysqlはそれをエスケープ文字と見なします。
次に、次のコード行を使用して、ファイルパス文字列の '\'を "\\"に置き換えようとしました。
String filepath="C:\title.csv";
String filepath2=filepath.replace("\\","\\\\");
それでもファイルパスへの影響はなく、 '\ t'はエスケープ文字と見なされます。
だから私の質問は、ファイルの名前を変更せずにこの問題を解決する方法ですか?
次のようなパスがある場合
String filepath="C:\new folder\title.csv";
\ nと\ tをエスケープ文字と見なします。パス内のファイルまたはフォルダーの名前がエスケープ文字の原因となっている場合、この問題を解決するにはどうすればよいですか?
Javastring literal)で二重スラッシュを使用して、スラッシュをエスケープします。
String s = "c:\\new folder\\title.csv";
エンドユーザーがJFileChooserに文字列を入力すると、文字列変数にはユーザーが入力したすべての文字が含まれます。エスケープは、Javaソースコードで文字列リテラルを使用する場合にのみ必要です。
そして、準備されたステートメントを使用して、データベーステーブルに文字列を挿入します。これにより、特殊文字が適切にエスケープされ、 SQLインジェクション 攻撃が回避されます。準備済みステートメントの詳細については、 JDBCに関するJavaチュートリアル を参照してください。
あなたが使用する必要があります:
String filepath2=filepath.replace("\\","\\\\");
String filepath2=filepath.replace("\","\\")
は無効なコードです-\
は文字列リテラルの特殊文字であり、エスケープする必要があります。
String escapedFilepath = filepath.replace("\\","\\\\"); //double all backslashes
最初のリテラル(filepath
)でエスケープを使用する必要があります。次に例を示します。
String filepath="C:\\title.csv"