Java 确保用户输入特定的文件类型

Java 确保用户输入特定的文件类型,java,jfilechooser,Java,Jfilechooser,我有一个JFileChooser(此处未显示),它接受用户的文件输入。我想确保用户只输入一个.txt文件。是否有一个函数允许使用JFileChooser或其他可能的解决方案对此进行验证。我认为: if (selectedFile != null && selectedFile.getName().endsWith(".txt")){ //action } else { JOptionPane.showMessageDialog(null, "You have no

我有一个JFileChooser(此处未显示),它接受用户的文件输入。我想确保用户只输入一个.txt文件。是否有一个函数允许使用JFileChooser或其他可能的解决方案对此进行验证。我认为:

if (selectedFile != null && selectedFile.getName().endsWith(".txt")){
    //action
} else {
    JOptionPane.showMessageDialog(null, "You have not selected a .txt file. Please choose a correct file type to continue.);
}
但是,如果可能的话,我希望这样,即使文件名中没有明确以.txt结尾,它仍然会被接受,但它必须仍然是一个文本文件。

请参阅JavaDoc以与JFileChooser一起使用


您需要实现自定义文件筛选器,它不仅会检查文件扩展名,还会检查文件内容是否为文本。

回答,如何检测文件是否为.txt文件您可以使用Apache Tika库进行此操作

public static void main(String[] sss) {

        try {
        //  System.out.println(ContainsMedia(new File("D:\\test")));

            Tika tika = new Tika();
            String contentTypeDetected = "";
            File dir = new File("D:\\test");
            for (String dir2 : dir.list()) {
                try {

                    contentTypeDetected = tika.detect(new File(dir,dir2));
                    System.out.println(contentTypeDetected);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
输出:文本/纯文本 尽管该目录中的文件是文本文件,但我将其重命名为.exe文件和.rar文件,但apache tikka告诉了我真相 下载这里是jar的链接,下载后将其添加到类路径中

其次,如果你想让他只选择txt文件类型,你可以这样做

fileChooser.setFileFilter(new FileFilter() {

            @Override
            public boolean accept(File f) {
                if (f.isDirectory())
                    return true;
                String name = f.getName().toLowerCase();
                return name.endsWith(".txt") 
                        ;
            }

            @Override
            public String getDescription() {
                return "only text file";
            }
        });
是的,这是可能的。
JFileChooser提供您所需的一切。

例如:

    jfc.setAcceptAllFileFilterUsed(false);

    jfc.setFileFilter(new FileFilter()
    {
        @Override
        public String getDescription()
        { return "*" + fileExtension; }

        @Override
        public boolean accept(File f)
        {
            return f.isDirectory() || f.getName().toLowerCase().endsWith(fileExtension));
        }
    });
(jfc是以前创建的JFileChooser对象。)

这是一个非常简单的例子。
如您所见,您必须添加一个新的文件过滤器来解决您的问题。
这个对象得到了一个名为“accept”的方法,它只返回一个布尔值
(是否为“有效文件”)

但是,您应该查看Java文档中关于它的所有可能性。

或者使用Oracle提供的这些教程:

顺便说一句,您无法确保所选文件仅包含文本。
之后你必须检查一下

祝你好运

(这并不难实现;D)

非常感谢您的帮助:)