java - 在窗口对话框中排除文件 OSX
问题描述
我尝试从窗口对话框中排除类型文件。
void setup() {
selectFolder("Select a folder to process:", "folderSelected");
}
void folderSelected(File selection) {
if (selection == null) {
println("Window was closed or the user hit cancel.");
} else {
println("User selected " + selection.getAbsolutePath());
printArray(getFolderContent(selection));
}
}
import java.io.FilenameFilter;
static final String[] exts = { ".gif", ".png", ".jpeg", ".jpg", ".tiff", ".tif"};
static final FilenameFilter pictsFilter = new FilenameFilter() {
boolean accept(File dir, String name) {
name = name.toLowerCase();
for (int i = exts.length; i-- != 0;) {
if (name.endsWith(exts[i])) {
return true;
}
}
return false;
}
};
static final File[] getFolderContent(File dir) {
return dir.listFiles(pictsFilter);
}
我不想用JChooser
,因为它又丑又旧UI
。我尝试使用,FileDialog
因为用于显示文件的窗口具有 OSX 设计对应关系。但是我没有找到任何代码来设置在窗口打开时排除类型文件的可能性。我发现它的唯一一件事是使用下面的代码在选择文件夹后排除文件;但我觉得这个解决方案不是很好!我的目的是可以直接在窗口中看到文件是否被授权。
解决方案
要使用文件名过滤器,您需要创建它并在文件对话框中设置它。
final String[] exts = { ".gif", ".png", ".jpeg", ".jpg", ".tiff", ".tif"};
FileDialog dialog = new FileDialog(frame, "select file", FileDialog.LOAD);
dialog.setFilenameFilter(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
name = name.toLowerCase();
for (int i = 0; i < exts.length; i++) {
if (name.endsWith(exts[i])) {
return true;
}
}
return false;
}}
);
请注意,根据 javadoc:
文件名过滤器在 Sun 的 Microsoft Windows 参考实现中不起作用。
推荐阅读
- anylogic - 在 RunTime 之前编辑参数
- c# - 替换自定义键盘键以出现在 C# 的 RichTextbox 中
- c++ - 如何使用犰狳 c++ 库计算 Excel Percentile.exc?
- file - 读取大于 500 MB 的文件时 Luajit “内存不足”
- windows-10 - 在 Windows 10 中更改用户名后如何收回配置文件文件夹的权限?
- visual-studio-code - VSCode 如何找回菜单?
- node.js - 来自 module.js 的 app.js 中的触发函数
- spring-boot - 发送到 Kafka 主题时反序列化对象时出错
- arrays - 我的代码没有从用户那里读取数组
- react-native - 在具有绝对位置的视图上反应 Native TouchableWithoutFeedback