首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX FileChooser排除扩展

JavaFX FileChooser排除扩展
EN

Stack Overflow用户
提问于 2014-12-12 11:48:53
回答 1查看 1.3K关注 0票数 1

我用JavaFX做了一个上传应用程序。(在本例中,我使用JavaFX 8)

我希望应用程序能够上传几乎任何文件(音频文件,媒体文件,pdf,zip,7z等)。但我不能让用户上传恶意文件或有害脚本到我的服务器(.exe,.php,.sh应该被禁止)。

问题是,在JavaFX FileChooser中,我没有看到任何允许我排除某些扩展的方法。我想排除FileChooser的一些扩展,而不是向FileChooser添加广泛的扩展过滤器。

下面是一些示例代码:

代码语言:javascript
复制
    fc = new FileChooser();
    fc.getExtensionFilters().addAll(
        new FileChooser.ExtensionFilter("Audio files", /* some audio files extension*/),
        new FileChooser.ExtensionFilter("Video files", /* some video files extension*/),
        new FileChooser.ExtensionFilter("eBook files", /* some eBook files extension*/),
        // I want to include all media files, but exclude some extensions here
        new FileChooser.ExtensionFilter("All files", "*.*")
    );

有什么方法可以在文件选择器中排除扩展名吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-12 15:04:24

对于FileChooser,不可能排除您可以使用JFileChooser的扩展...

您可以使用这个类为JFileChooser而不是FileChooser扩展FileFilter:

我使用来自Apache Commons IO的FilenameUtils.getExtension

代码语言:javascript
复制
 public class ReverseFileNameExtensionFilter extends FileFilter {

    private String [] fileextensions;
    private String description="";

     public ReverseFileNameExtensionFilter(String description, String... fileextension){
         this.fileextensions=fileextension;
         this.description = description;
     }

     @Override
     public String getDescription(){
       return description;
     }

     public String[] getExtensions(){
       return fileextensions;
     }

     @Override
     public boolean accept(File f){
         String [] extensions=this.getExtensions();
         String extfile = FilenameUtils.getExtension(f.getAbsolutePath());
         for (int t=0;t<extensions.length;t++){
             if (extfile.equals(extensions[t])){
                 return false;
             }  
         }
         return true;
     }

 }

使用它的示例:

代码语言:javascript
复制
 FileFilter filter = new ReverseFileNameExtensionFilter("File that you don't want", "exe", "dll");
 JFileChooser fileChooser = ...;
 fileChooser.addChoosableFileFilter(filter);

如果您不想使用Apache Commons IO,可以将此函数添加到ReverseFileNameExtensionFilter类中:

代码语言:javascript
复制
private String getFileExtension(File file) {
    String name = file.getName();
    int lastIndexOf = name.lastIndexOf(".");
    if (lastIndexOf == -1) {
        return ""; // empty extension
    }
    return name.substring(lastIndexOf+1);
}

并更改function accept(File F)这一行:

代码语言:javascript
复制
String extfile = FilenameUtils.getExtension(f.getAbsolutePath());

有了这个:

代码语言:javascript
复制
String extfile = getFileExtension(f);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27436534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档