我用JavaFX做了一个上传应用程序。(在本例中,我使用JavaFX 8)
我希望应用程序能够上传几乎任何文件(音频文件,媒体文件,pdf,zip,7z等)。但我不能让用户上传恶意文件或有害脚本到我的服务器(.exe,.php,.sh应该被禁止)。
问题是,在JavaFX FileChooser中,我没有看到任何允许我排除某些扩展的方法。我想排除FileChooser的一些扩展,而不是向FileChooser添加广泛的扩展过滤器。
下面是一些示例代码:
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", "*.*")
);有什么方法可以在文件选择器中排除扩展名吗?
发布于 2014-12-12 15:04:24
对于FileChooser,不可能排除您可以使用JFileChooser的扩展...
您可以使用这个类为JFileChooser而不是FileChooser扩展FileFilter:
我使用来自Apache Commons IO的FilenameUtils.getExtension
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;
}
}使用它的示例:
FileFilter filter = new ReverseFileNameExtensionFilter("File that you don't want", "exe", "dll");
JFileChooser fileChooser = ...;
fileChooser.addChoosableFileFilter(filter);如果您不想使用Apache Commons IO,可以将此函数添加到ReverseFileNameExtensionFilter类中:
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)这一行:
String extfile = FilenameUtils.getExtension(f.getAbsolutePath());有了这个:
String extfile = getFileExtension(f);https://stackoverflow.com/questions/27436534
复制相似问题