在“最近的文件”中获取带有两个点文件名的文件

时间:2018-07-24 08:30:05

标签: java regex

我的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;
}

2 个答案:

答案 0 :(得分:0)

在这种情况下,我认为您不需要正则表达式:

f.getName().endsWith(".tpp")

答案 1 :(得分:0)

代替if(ext[1].equals("tpp"))...

您应该做if(ext[length-1].equals("tpp"))..

这是因为,如果您的文件名是sample.file.tpp,则在拆分名称时会得到一个包含三个元素的数组:samplefiletpp

正如您在此处看到的,tpp将是数组中的第三个元素(即index = 2)。因此,您可以执行ext[2]或对于具有两个以上点的方案,请使用length-1,因为文件扩展名将始终位于最后。