java中的txt文件格式验证

时间:2011-12-28 18:22:43

标签: java validation text format

验证.txt文件是否为:

的最佳方法是什么?
  • 实际上是一个.txt文件而不是另一种只改变了扩展名的文件。

  • .txt文件的格式与指定的格式匹配(因此可以正确解析,包含所有相关信息等)。

这一切都是在Java中完成的,其中将检索文件,然后需要检查以确保它应该是它应该是什么。到目前为止,我只发现JHOVE(现在是JHOVE2)作为此任务的工具,但在Java代码中实现它的文档方式并没有找到太多,而不是通过命令行。谢谢你的帮助。

1 个答案:

答案 0 :(得分: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:00
不确定是否存在性能问题,但正如我所知,我多次复制“transactions.txt”中的条目以构建一个包含大约130万行的文本文件,并且我能够通过整个文件在我的电脑上大约7秒钟。我将System.out更改为仅显示无效(524,288)和有效(786,432)格式条目末尾的总计数。 “transactions.txt”的大小约为85mb。