java - java中的txt文件格式验证

标签 java validation text format

验证 .txt 文件是否为的最佳方法是什么:

  • 实际上是一个 .txt 文件,而不是其他类型的文件,只是扩展名发生了变化。

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

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

最佳答案

听起来您正在寻找一种通用的格式设置选项,我可以向您推荐正则表达式吗?您可以使用正则表达式进行各种不同类型的匹配。我在下面写了一个简单的例子 [对于所有那些正则表达式专家,如果我没有使用完美的表达,请怜悯我;)]。您可以将 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)


编辑 2011 年 12 月 29 日上午 10:00 左右
不确定这是否存在性能问题,但仅供引用,我多次复制“transactions.txt”中的条目以构建一个包含约 130 万行的文本文件,我能够通过在我的电脑上大约 7 秒内完成整个文件。我将 System.out 更改为仅在无效 (524,288) 和有效 (786,432) 格式化条目末尾显示总计数。 “transactions.txt”的大小约为 85mb。

关于java - java中的txt文件格式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8659698/

相关文章:

java - 如何在之前不知道类的情况下使用 CSV HeaderColumnNameTranslateMappingStrategy

java - 配置 ReSTLet 以在 OSGi 中使用 Jetty 连接器(不是简单连接器)

java - 在 RecyclerView 中保留滚动位置

javascript - 动态更改字段的欧芹规则

user-interface - 如何在 Unity 中针对所有屏幕尺寸正确缩放文本?

java - 使用 Spring 的元注释扩展 lombok 注释

c# - 如何确定 DateTime 中的值是否有效?

jquery - 在 ASP.NET MVC 3 View 中显示 JavaScript (jQuery) 错误的推荐方法是什么?

C++ windows位图绘制文字

mysql - 如何计算 MySQL blob 文本中特定单词出现的次数?