2016-02-28 63 views
0

我想在Java Swing應用程序中驗證從JFilechooser中選擇的文件的類型。我需要檢查CSV文件中的分隔類型,因爲只允許使用「逗號」分隔的CSV文件。我是Java新手。請幫助我實現所需的功能。我目前正在使用的部分代碼是:如何找到java中csv文件的分隔類型

ActionListener FileValidationListener = new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     String s = so.getText(); // so is the JTextfield used with JFilechooser 
     String t1 = s.substring(s.lastIndexOf("."),s.length()); 

     if((!t1.equals(".xlsx"))) 
     { 
      if(!t1.equals(".csv")) 
      { 
       JOptionPane.showMessageDialog(null, "Enter valid source file"); 
      } 
     } 
    } 
}; 

回答

0

我不認爲你可以。根據定義,CSV文件是傾倒文本的,因此文件本身不提供有關正在使用的分隔符的元數據。

你可以根據統計文件中出現的公共分隔符的次數來猜測。

但是,更好的解決方案是讓用戶可以選擇告訴你他們在文件中使用了什麼分隔符。

+0

請添加一些代碼來檢查選擇的CSV文件是逗號分隔還是使用其他分隔符(如分號) – user3797489

+0

我沒有這樣的代碼。我永遠不會試圖檢查文件以找出分隔符是什麼;在我看來,錯誤的幅度太大了,我會要求用戶告訴我他們認爲分隔符是在文件打開對話框中。 – Gavin

0

沒有格式的CSV文件格式規範。但有一些expectations這種類型的文件。主要都是

  • 由記錄(每行通常一個記錄),
  • 其中每個記錄具有相同的字段序列。
  • 所以,檢查選定的文件,你可以逐條線加載(記錄逐個記錄),並約在每次讀取線逗號計算。如果所有行中逗號的數量相同,您可以假設您有一個有效的CSV文件。

    另一種更普遍的做法是試圖通過自己的這種方式來檢測分隔符:

    • 讀取文件中的行由行每行
    • 創造地圖上有按鍵被假定字段分隔符(任何獨特的字符在該行中)並且值是該行中的字段數量,如果鍵值是分隔符
    • 您應該有一個當前處理行的地圖和所有先前行的一個地圖
    • 從地圖中減去當前行的地圖所有行
    • 做這個分析,而你映射的所有線不是空的或直到文件的末尾
    • 如果你的所有線圖是空的該文件是無效的CSV文件,因爲沒有分隔符分裂字段上的文件行滿足假設#3
    • 如果您的映射只有一個鍵值對,則該文件完成假設#3並且該對中的鍵是您的分隔符(例如,逗號)和值是在每個文件中的行
    • 量字段,如果有多於1雙CSV文件不是有效的,並且假設#3如願以償比1個定界符更
    +0

    請提供一些示例代碼來實現此功能 – user3797489

    相關問題