是否可以让用户在JFileChooser中输入带引号的路径并获取没有引号的路径?
例如,用户将:"c:\path\to\File"
放在文件名文本字段中。但是当我得到所选文件时,我得到了当前目录+ "c:\path\to\File"
。他们是解决这个问题的方法吗?
谢谢,
答案 0 :(得分:2)
你可以这样做:
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
,不包括初始细分。