9

私は非常に小さくて単純な問題を抱えていますが、解決策が得られていません。実際、ファイルチューザーを使用してCSVファイルパスを取得しています。ロードデータローカルファイルクエリを使用して、このcsvファイルのデータをデータベースに入力しています。

入力したファイルパスが「C:\ title.csv」であるとします。この文字列を入力してクエリを実行すると、パスに\tの組み合わせが表示されます。この\tは実際にはファイルパスの一部であり、エスケープ文字'\t'ではありません。しかし、javaとmysqlはそれをエスケープ文字と見なします。

次に、次のコード行を使用して、ファイルパス文字列の「\」を「\\」に置き換えようとしました。

String filepath="C:\title.csv";
String filepath2=filepath.replace("\\","\\\\");

それでもファイルパスには影響はなく、「\t」はエスケープ文字と見なされます。

だから私の質問は、ファイルの名前を変更せずにこの問題を解決する方法ですか?

次のようなパスがある場合

String filepath="C:\new folder\title.csv";

\nと\tはエスケープ文字と見なされます。パス内のファイルまたはフォルダの名前がエスケープ文字の原因である場合、この問題を解決するにはどうすればよいですか?

4

4 に答える 4

14

スラッシュをエスケープするには、Java文字列リテラルでダブルスラッシュを使用します。

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

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

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

于 2011-09-26T10:26:02.123 に答える
6

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

 String filepath2=filepath.replace("\\","\\\\");
于 2011-09-26T10:25:08.657 に答える
3

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

String escapedFilepath = filepath.replace("\\","\\\\"); //double all backslashes
于 2011-09-26T10:22:09.843 に答える
0

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

String filepath="C:\\title.csv"
于 2011-09-26T10:25:24.120 に答える