Как избежать обратной косой черты и автоматически сгенерированного escape-символа в пути к файлу в Java - PullRequest
9 голосов
/ 26 сентября 2011

У меня очень маленькая и простая проблема, но я не могу решить ее. На самом деле я получаю путь к файлу CSV с помощью средства выбора файлов. Я ввожу данные из этого CSV-файла в базу данных, используя локальный информационный запрос загрузки данных.

Предположим, мой введенный путь к файлу "C: \ title.csv" Когда я добавлю эту строку для запроса, вы увидите комбинацию \ t в пути. Это \ t, которое на самом деле является частью пути к файлу, а не escape-символом \ t. Но java и mysql считают его escape-символом.

затем я попытался заменить '\' в строке пути к файлу на «\\», используя следующую строку кода.

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

Тем не менее, это не влияет на путь к файлу, и он по-прежнему рассматривает '\ t' как escape-символ.

Итак, мой вопрос, как решить эту проблему без изменения имени файла?

Если у нас есть путь, такой как

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

Он будет рассматривать \ n и \ t как escape-символ. Как решить эту проблему, если имя файла или папки в пути вызывают escape-символ?

Ответы [ 4 ]

13 голосов
/ 26 сентября 2011

Использование двойной косой черты в Java строковый литерал для экранирования косой черты:

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

Если конечный пользователь вводит строку в JFileChooser, строковая переменная будет содержать все символы, введенные пользователем. Экранирование необходимо только при использовании литералов String в исходном коде Java.

И используйте подготовленный оператор для вставки строк в таблицу базы данных. Это будет корректно экранировать специальные символы и избегать SQL-инъекций атак. Подробнее о подготовленных утверждениях читайте в руководстве по Java о JDBC .

6 голосов
/ 26 сентября 2011

нужно использовать:

 String filepath2=filepath.replace("\\","\\\\");
2 голосов
/ 26 сентября 2011

String filepath2=filepath.replace("\","\\") недопустимый код - \ является специальным символом в строковых литералах и должен быть экранирован:

String escapedFilepath = filepath.replace("\\","\\\\"); //double all backslashes
0 голосов
/ 26 сентября 2011

Вы должны использовать экранирование в начальном литерале (filepath), например:

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