在java中查找特定命名方案的所有文件
假设我有一堆这样命名的文件:在java中查找特定命名方案的所有文件,java,file,io,Java,File,Io,假设我有一堆这样命名的文件: 10011-1-chassis.EDRW 10011-2-front.EDRW 10011-3-rear.EDRW 20011-1-chassis.EDRW 20011-2-front.EDRW 20011-3-back.EASM 20011-3-cover.EASM 如果我只想要20011-x文件,那么我应该如何列出它们,然后只列出适当的文件,以便我可以在JOptionPane中显示文件名,让用户从下拉列表中选择他们感兴趣的文件?编写一个java.io.File
10011-1-chassis.EDRW
10011-2-front.EDRW
10011-3-rear.EDRW
20011-1-chassis.EDRW
20011-2-front.EDRW
20011-3-back.EASM
20011-3-cover.EASM
如果我只想要20011-x文件,那么我应该如何列出它们,然后只列出适当的文件,以便我可以在JOptionPane中显示文件名,让用户从下拉列表中选择他们感兴趣的文件?编写一个
java.io.FilenameFilter
,它使用一个正则表达式过滤掉不可接受的文件名字
我建议使用正则表达式,因为我假设您希望动态更改模式。在那种情况下,这并不过分。对于你举的例子,一个硬接线的解决方案对我来说似乎没有什么用处。我假设用户希望通过在UI中指定模式来告诉您他们希望如何更改模式。编写一个
java.io.FilenameFilter
,它使用正则表达式过滤掉不可接受的文件名
我建议使用正则表达式,因为我假设您希望动态更改模式。在那种情况下,这并不过分。对于你举的例子,一个硬接线的解决方案对我来说似乎没有什么用处。我假设用户希望通过在UI中指定模式来告诉您他们希望如何更改模式。使用
filename.startsWith(“20011-”)
作为筛选谓词。使用filename.startsWith(“20011-”)
作为筛选谓词。使用JFileChooser
而不是带有列表的JOptionPane
。例如
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.File;
class ShowPrefixedDrawings {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(true);
chooser.setAcceptAllFileFilterUsed(false);
String prefix = JOptionPane.showInputDialog(
null, "Prefix", "D");
chooser.setFileFilter(
new PrefixDrawingFileFilter(prefix));
int result = chooser.showOpenDialog(null);
if (result==JFileChooser.APPROVE_OPTION) {
File[] files = chooser.getSelectedFiles();
for (File file : files) {
System.out.println(file.getName());
}
}
System.exit(0);
}
});
}
}
class PrefixDrawingFileFilter extends FileFilter {
String prefix;
String[] suffixes = {"dwg", "dxf", "DWG", "DXF"};
PrefixDrawingFileFilter(String prefix) {
this.prefix = prefix;
}
public boolean accept(File f) {
if (f.isDirectory()) return true;
String name = f.getName();
if ( name.startsWith(prefix) ) {
for (String type : suffixes) {
if (name.endsWith(type)) return true;
}
}
return false;
}
public String getDescription() {
return "eDrawings Viewer files starting with " + prefix;
}
}
使用
JFileChooser
而不是带有列表的JOptionPane
。例如
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.File;
class ShowPrefixedDrawings {
public static void main(String[] args) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(true);
chooser.setAcceptAllFileFilterUsed(false);
String prefix = JOptionPane.showInputDialog(
null, "Prefix", "D");
chooser.setFileFilter(
new PrefixDrawingFileFilter(prefix));
int result = chooser.showOpenDialog(null);
if (result==JFileChooser.APPROVE_OPTION) {
File[] files = chooser.getSelectedFiles();
for (File file : files) {
System.out.println(file.getName());
}
}
System.exit(0);
}
});
}
}
class PrefixDrawingFileFilter extends FileFilter {
String prefix;
String[] suffixes = {"dwg", "dxf", "DWG", "DXF"};
PrefixDrawingFileFilter(String prefix) {
this.prefix = prefix;
}
public boolean accept(File f) {
if (f.isDirectory()) return true;
String name = f.getName();
if ( name.startsWith(prefix) ) {
for (String type : suffixes) {
if (name.endsWith(type)) return true;
}
}
return false;
}
public String getDescription() {
return "eDrawings Viewer files starting with " + prefix;
}
}
这应该是对@duffymo给出的答案的评论这应该是对@duffymo给出的答案的评论唯一的问题是,这将用于启动一个edrawings文件,然后使用JFileChooser将允许用户选择任何要打开的文件,不是吗?意思是他们可以打开他们想要的任何东西?@dah:“…打开他们想要的任何东西?”当你尝试时发生了什么?AFAIU提供虚假信息的唯一方法是在文件选择器的“文件名:”字段中键入虚假文件名。即使是这样,在另一边进行一点快速检查也会清除那些胡说八道的用户。弹出一个
JOptionPane
指出他们是一个麻木的骷髅头&此后他们可能会用鼠标选择文件顺便说一下,edrawings使用的文件扩展名是什么?@dah:“EDRW和EASM是使用的扩展名。”嗯。我只是浏览了一下网站,得到的印象是类型是DWG和DXF。不管怎样,根据需要更改它们。@dah:“是否可以将JFilechooser限制为一个目录?”除了该线程中的FileSystemView
建议外,如果(f.isDirectory())返回true,您可能还需要删除文件过滤器中的代码>行。唯一的问题是,这将用于启动edrawings文件,然后使用JFileChooser将允许用户选择任何文件来打开,不是吗?意思是他们可以打开他们想要的任何东西?@dah:“…打开他们想要的任何东西?”当你尝试时发生了什么?AFAIU提供虚假信息的唯一方法是在文件选择器的“文件名:”字段中键入虚假文件名。即使是这样,在另一边进行一点快速检查也会清除那些胡说八道的用户。弹出一个JOptionPane
指出他们是一个麻木的骷髅头&此后他们可能会用鼠标选择文件顺便说一下,edrawings使用的文件扩展名是什么?@dah:“EDRW和EASM是使用的扩展名。”嗯。我只是浏览了一下网站,得到的印象是类型是DWG和DXF。不管怎样,根据需要更改它们。@dah:“是否可以将JFilechooser限制为一个目录?”除了该线程中的FileSystemView
建议外,如果(f.isDirectory())返回true,您可能还需要删除文件筛选器中的代码>行。在这种情况下,用户只能打开两种文件类型,因为应用程序的此部分不允许打开任何非edrawings的文件。在这种情况下,用户只能打开两种文件类型,因为应用程序的此部分不允许打开任何非edrawings的文件。