Получить путь с кавычками из JFileChooser?

Можно ли позволить пользователю вводить путь с кавычками в JFileChooser и получать этот путь без кавычек?

Например, пользователь вводит: "c:\path\to\File" в текстовое поле Имя файла. но когда я получил выбранный файл, я получил текущий каталог + "c:\path\to\File". Является ли их способ решить эту проблему?

Спасибо,


person Feras Odeh    schedule 19.06.2012    source источник
comment
Используйте метод String.replaceAll.   -  person kv-prajapati    schedule 19.06.2012


Ответы (1)


Вы можете сделать что-то вроде этого:

String str = "\"C:\\foor\\bar\"";
System.out.println(str);
String newStr = str.replaceAll("\"?(.+?)\"?", "$1");
System.out.println(newStr);

печатает:

C:\foo\бар

C:\foo\бар

Это удалит кавычки ("), которые находятся точно в начале и в конце строки. ? в регулярном выражении означает, что кавычек может и не быть, поэтому, например, все следующее должно давать одинаковый результат:

C:\foo\бар

C:\foo\бар

C:\foo\бар

C:\foo\бар

Однако, насколько мне известно, символ " не является частью действительного пути к файлу, поэтому вы можете обойти это, просто выполнив: str.replaceAll("\"","");.

РЕДАКТИРОВАТЬ: Увидев ваш комментарий и редактирование вопроса, я сделал этот короткий фрагмент кода, который, похоже, делает то, что вам нужно. Тем не менее, я не буду удалять свой предыдущий ответ на тот случай, если кто-то еще может найти его полезным.

JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle("Hello");
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
chooser.setAcceptAllFileFilterUsed(false);
if (chooser.showOpenDialog(f) == JFileChooser.APPROVE_OPTION) 
{ 
    File file = chooser.getSelectedFile();
    if (file.getName().contains("\""))
    {
        Pattern pattern = Pattern.compile("\"?(.*?)\"?");
        Matcher m = pattern.matcher(file.getName());
        if (m.matches())
        {
            System.out.println("Group Found: " + m.group(1));
        }
    }
}

Похоже, это то, что вам нужно, я вставил следующее в текстовое поле «Файл»: "C:\foo\bar.txt" и код, напечатанный C:\foo\bar.txt, исключая начальный сегмент.

person npinti    schedule 19.06.2012
comment
Как насчет текущего каталога, который добавляется к пути. JFileChooser предполагает, что путь с кавычками является именем файла и добавляет текущий каталог в качестве родительского. - person Feras Odeh; 19.06.2012
comment
@FerasOdeh: я изменил свой ответ, это должно делать то, что вам нужно. - person npinti; 19.06.2012
comment
Не знаю, как это будет работать, поскольку \"?(.*?)\"? будет соответствовать пустой строке. - person dacwe; 19.06.2012
comment
@dacwe: Вы правы, однако, если пользователь не предоставит текст, кнопка открытия JFileChooser ничего не сделает. Если пользователь просто передает "", то OP может выполнить другие проверки. - person npinti; 19.06.2012
comment
Нет, нет, я не это имею в виду, что регулярное выражение будет соответствовать пустым местам между всеми символами в любой строке. - person dacwe; 19.06.2012