2017-06-06 75 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

非常感謝您的幫助:) –

相關問題