2011-12-28 60 views
4

什麼是驗證一個.txt文件是否是最好的方法:txt文件格式驗證在java中

  • 其實一個txt文件,而不是其他類型的文件只與擴展名改成。

  • .txt文件的格式符合指定的格式(因此它能夠被正確解析,包含了所有的相關信息等)

這一切是用Java語言實現,在那裏一個文件將被檢索,然後需要檢查,以確保它是它應該是。到目前爲止,我只找到JHOVE(現在是JHOVE2)作爲這個任務的工具,但是沒有在Java代碼中通過命令行實現它的文檔方面找到很多東西。謝謝你的幫助。

+1

關於字符集,代碼頁等,您對'文本文件'的定義是什麼? – home 2011-12-28 18:24:05

+0

格式是自定義格式還是XML,JSON或.properties之類的已知格式?如果是自定義格式,是否可以切換到更廣泛使用和支持的東西(如XML等)? – Paul 2011-12-28 18:26:07

+0

你的意思是一個文件可以識別二進制數據嗎?因爲你知道,很多東西都可以是文本文件。xml是一個文本文件,一個html是一個文本文件,甚至一個圖形文件,svg是一個有效的文本文件 – 2011-12-28 18:26:54

回答

4

聽起來你正在尋找一種通用的格式選項,我可以向你推薦正則表達式嗎?你可以使用正則表達式進行各種不同的匹配。我在下面寫了一個簡單的例子[對於所有那些正則表達式專家,如果我沒有使用完美的表達式,請對我施以憐憫;]]。您可以將REGEX和MAX_LINES_TO_READ常量放入一個屬性文件中,並對其進行修改以使其更加通用化。

你基本上會測試你的「.txt」文件的最大行數(但是需要很多行來確定格式是否合適 - 你也可以使用正則表達式作爲標題行或者使用多個不同的正則表達式作爲需要測試格式),如果所有這些行匹配,文件將被標記爲「有效」。

這只是您可能運行的一個示例。你應該實現適當的異常處理,而不是僅僅爲一個捕獲「異常」。

爲了在Java中測試正則表達式,http://www.regexplanet.com/simple/index.html的作品非常好。

這裏的 「ValidateTxtFile」 源...

import java.io.*; 

public class ValidateTxtFile { 

    private final int MAX_LINES_TO_READ = 5; 

    private final String REGEX = ".{15}[ ]{5}.{15}[ ]{5}[-]\\d{2}\\.\\d{2}[ ]{9}\\d{2}/\\d{2}/\\d{4}"; 

    public void testFile(String fileName) { 

     int lineCounter = 1; 

     try { 

      BufferedReader br = new BufferedReader(new FileReader(fileName)); 

      String line = br.readLine(); 

      while ((line != null) && (lineCounter <= MAX_LINES_TO_READ)) { 

       // Validate the line is formatted correctly based on regular expressions     
       if (line.matches(REGEX)) { 
        System.out.println("Line " + lineCounter + " formatted correctly"); 
       } 
       else { 
        System.out.println("Invalid format on line " + lineCounter + " (" + line + ")"); 
       } 

       line = br.readLine(); 
       lineCounter++; 
      } 

     } catch (Exception ex) { 
      System.out.println("Exception occurred: " + ex.toString()); 
     } 
    } 

    public static void main(String args[]) { 

     ValidateTxtFile vtf = new ValidateTxtFile(); 

     vtf.testFile("transactions.txt"); 
    } 
} 

這裏是什麼在 「transactions.txt」 ......

Electric   Electric Co.  -50.99   12/28/2011 
Food    Food Store   -80.31   12/28/2011 
Clothes    Clothing Store  -99.36   12/28/2011 
Entertainment  Bowling    -30.4393  12/28/2011 
Restaurant   Mcdonalds   -10.35   12/28/11 

輸出,當我跑的應用是......

Line 1 formatted correctly 
Line 2 formatted correctly 
Line 3 formatted correctly 
Invalid format on line 4 (Entertainment  Bowling    -30.4393  12/28/2011) 
Invalid format on line 5 (Restaurant   Mcdonalds   -10.35   12/28/11) 


編輯12/29/2011上午10時許
不知道是否有這方面的性能問題,但就像我重複「transactions.txt」中的條目多次構建一個包含大約130萬行的文本文件一樣,我能夠在我的電腦上通過大約7秒鐘完成整個文件。我將System.out更改爲僅在無效(524,288)和有效(786,432)格式化條目結束時顯示總計數。 「transactions.txt」大小約爲85mb。