2017-06-06 61 views
-1

我有一个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在名称结尾的情况下,它仍然会被接受,但它仍然是一个文本文件。

回答

0

请参见JavaDoc以使用FileFilter和JFileChooser。

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

1

答,如何检测,如果一个文件实际上是.txt文件,你可以使用Apache提卡库为

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(); 
     } 
    } 

输出:text/plain的 即使该目录中的文件是文本文件,但我重新命名为.exe文件和.rar文件,但apache的咖喱告诉在这里下载真理 是罐子的链接将其下载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"; 
      } 
     }); 
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来解决你的问题。
这个对象有一个名为“接受”的方法,这只是返回一个布尔值
(无论是“有效的文件”与否。)

但是,你应该检查Java文档中关于它的一切准备。顺便说一句
http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html


或使用Oracle提供的这些教程。你不能确保所选文件只包含文本。
你将不得不在此后检查。

祝你好运!
(这不会很难实现; D)

+0

非常感谢您的帮助:) –

相关问题