Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中查找特定命名方案的所有文件_Java_File_Io - Fatal编程技术网

在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的文件。