2

是否可以让用户在 JFileChooser 中输入带引号的路径并获得不带引号的路径?

例如,用户"c:\path\to\File" 在文件名文本字段中输入:但是当我得到选定的文件时,我得到了当前目录 + "c:\path\to\File"。他们是解决这个问题的方法吗?

谢谢,

4

1 回答 1

2

你可以这样做:

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

印刷:

"C:\foo\bar"

C:\foo\bar

这将删除"恰好位于字符串开头和结尾的引号 ( )。正?则表达式中的 表示引号可能不存在,因此例如,以下内容都应该产生相同的结果:

"C:\foo\bar"

"C:\foo\bar

C:\foo\bar"

C:\foo\bar

但是,据我所知,该"字符不会成为有效文件路径的一部分,因此您可以通过执行以下操作来解决: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,不包括初始段。

于 2012-06-19T11:57:18.613 回答