web-dev-qa-db-fra.com

Comment échapper les barres obliques inverses et le caractère d'échappement généré automatiquement dans le chemin du fichier dans java

J'ai un problème très petit et simple mais je n'obtiens pas de solutions. En fait, j'obtiens un chemin de fichier CSV en utilisant le sélecteur de fichiers. J'entre les données de ce fichier csv dans la base de données à l'aide de la requête de fichier local de chargement des données.

Supposons que mon chemin de fichier saisi soit "C:\title.csv" Lorsque je mets cette chaîne pour interroger la, vous verrez la combinaison\t dans le chemin. Ce\t qui fait en fait partie du chemin du fichier et non le caractère d'échappement '\ t'. Mais le Java et mysql le considèrent comme un caractère d'échappement.

puis j'ai essayé de remplacer "\" dans la chaîne de chemin de fichier par "\\" en utilisant la ligne de code suivante.

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

Il n'y a toujours pas d'effet sur le chemin du fichier et il considère toujours le '\ t' comme caractère d'échappement.

Ma question est donc de savoir comment résoudre ce problème sans changer le nom du fichier?

Si nous avons un chemin comme

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

Il considérera les\n et\t comme caractère d'échappement. comment résoudre ce problème si le nom du fichier ou du dossier dans le chemin provoque un caractère d'échappement?

9
Param-Ganak

Utilisez une double barre oblique dans Java chaîne littérale pour échapper à une barre oblique:

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

Si un utilisateur final entre une chaîne dans un JFileChooser, la variable de chaîne contiendra tous les caractères saisis par l'utilisateur. L'échappement n'est nécessaire que lorsque vous utilisez des littéraux de chaîne dans Java code source.

Et utilisez une instruction préparée pour insérer des chaînes dans une table de base de données. Cela échappera correctement les caractères spéciaux et évitera les attaques injection SQL . En savoir plus sur les instructions préparées dans le tutoriel Java sur JDBC .

13
JB Nizet

vous devez utiliser:

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

String filepath2=filepath.replace("\","\\") n'est pas un code valide - \ est un caractère spécial dans les littéraux de chaîne et doit être échappé:

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

Vous devez utiliser l'échappement dans le littéral initial (filepath), par exemple:

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