2011-12-28 100 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。