我的Java应用程序中有一个“打开最近的文件”按钮,并且似乎无法显示文件名中带有两个点的文件(例如sample.file.tpp
)。不过,文件名中的一个点仍然可以正常工作。我尝试在String[] ext = f.getName().split()
中使用regex参数,但没有任何效果。代码如下。请帮忙。谢谢。
public File showOpenDialog(Window ownerWindow){
//ppt.load();
fc.setInitialDirectory(ppt.getCurrent().toFile());
File f = fc.showOpenDialog(ownerWindow);
// Recent file settings
if(f!=null){
ppt.setCurrent(f.getParentFile().toString()) ;
ppt.addLately(f);
if(ppt.getLately()!=null){
setMenuItems();
}else{
}
String[] ext = f.getName().split("\\.");
System.out.println(ext.length);
if(ext.length > 1)
if(ext[1].equals("tpp")){
Main.setFileName(f.getName());
saved = true;
}
}
ppt.store();
return f;
}
/**
* Recent file settings
* Returns null if it is not tpp file
*/
public File fileOpen(File f){
ppt.load();
fc.setInitialDirectory(ppt.getCurrent().toFile());
// Recent file settings
if(f!=null){
ppt.setCurrent(f.getParentFile().toString()) ;
ppt.addLately(f);
if(ppt.getLately()!=null){
setMenuItems();
}else{
}
String[] ext = f.getName().split("\\.");
System.out.println(ext.length);
if(ext.length > 1)
if(ext[1].equals("tpp")){
Main.setFileName(f.getName());
saved = true;
}else return null;
else return null;
}
ppt.store();
return f;
}
public File showSaveDialog(Window ownerWindow){
ppt.load();
fc.setInitialDirectory(ppt.getCurrent().toFile());
File f = fc.showSaveDialog(ownerWindow);
// Recent file settings
if(f!=null){
ppt.setCurrent(f.getParentFile().toString()) ;
ppt.addLately(f);
if(ppt.getLately()!=null){
setMenuItems();
}else{
}
String[] ext = f.getName().split("\\.");
System.out.println(ext.length);
if(ext.length > 1)
if(ext[1].equals("tpp")){
Main.setFileName(f.getName());
saved = true;
}
}
ppt.store();
return f;
}
答案 0 :(得分:0)
在这种情况下,我认为您不需要正则表达式:
f.getName().endsWith(".tpp")
答案 1 :(得分:0)
代替if(ext[1].equals("tpp"))...
您应该做if(ext[length-1].equals("tpp"))..
这是因为,如果您的文件名是sample.file.tpp
,则在拆分名称时会得到一个包含三个元素的数组:sample
,file
和tpp
。
正如您在此处看到的,tpp
将是数组中的第三个元素(即index = 2)。因此,您可以执行ext[2]
或对于具有两个以上点的方案,请使用length-1
,因为文件扩展名将始终位于最后。