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

时间:2017-06-06 21:45:43

标签: java jfilechooser

我有一个JFileChooser(此处未显示),它接受用户文件Input。我想确保用户只输入.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结尾,它仍然会被接受,但它仍然必须是文本文件。 / p>

3 个答案:

答案 0 :(得分:1)

回答,如何检测文件是否真的是.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的链接,在下载Apache tikka homepage

后将它添加到你的类路径中

其次,如果你想让他只选择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";
            }
        });

答案 1 :(得分:0)

请参阅JavaDoc以使用FileFilter和JFileChooser。

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

答案 2 :(得分:0)

是的,这是可能的 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对象。)

这是一个非常简单的例子 如您所见,您必须添加一个新的FileFilter来解决您的问题 这个Object有一个名为“accept”的方法,它只返回一个布尔值
(是否是“有效档案”。)

但是你应该检查Java文档中的所有可能性。

或者使用Oracle提供的这些教程:
http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

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

祝你好运!
(它不会那么难以实现; D)