web-dev-qa-db-ja.com

javaのファイルパスでバックスラッシュと自動生成されたエスケープ文字をエスケープする方法

非常に小さく単純な問題がありますが、解決策がありません。実際、ファイルチューザーを使用して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をエスケープ文字と見なします。パス内のファイルまたはフォルダーの名前がエスケープ文字の原因となっている場合、この問題を解決するにはどうすればよいですか?

9
Param-Ganak

Javastring literal)で二重スラッシュを使用して、スラッシュをエスケープします。

String s = "c:\\new folder\\title.csv";

エンドユーザーがJFileChooserに文字列を入力すると、文字列変数にはユーザーが入力したすべての文字が含まれます。エスケープは、Javaソースコードで文字列リテラルを使用する場合にのみ必要です。

そして、準備されたステートメントを使用して、データベーステーブルに文字列を挿入します。これにより、特殊文字が適切にエスケープされ、 SQLインジェクション 攻撃が回避されます。準備済みステートメントの詳細については、 JDBCに関するJavaチュートリアル を参照してください。

13
JB Nizet

あなたが使用する必要があります:

 String filepath2=filepath.replace("\\","\\\\");
6
Ankur

String filepath2=filepath.replace("\","\\")は無効なコードです-\は文字列リテラルの特殊文字であり、エスケープする必要があります。

String escapedFilepath = filepath.replace("\\","\\\\"); //double all backslashes
2
Paul Bellora

最初のリテラル(filepath)でエスケープを使用する必要があります。次に例を示します。

String filepath="C:\\title.csv"
0
michael667