有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中的txt文件格式验证

验证是否存在错误的最佳方法是什么。txt文件是:

  • 事实上,这是一个错误。txt文件,而不是仅更改扩展名的其他类型的文件

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

这一切都是在Java中完成的,在Java中,将检索一个文件,然后需要进行检查以确保它是应该的。到目前为止,我只发现JHOVE(现在是JHOVE2)是用于此任务的工具,但在Java代码中实现它的文档方面,与通过命令行实现它相比,还没有发现太多。谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    听起来你在寻找一种通用的格式选项,我能向你推荐正则表达式吗?你可以使用正则表达式进行各种各样的匹配。我在下面写了一个简单的例子[对于所有的正则表达式专家,如果我没有使用完美的表达式,请原谅我;)]。您可以将REGEX和MAX_line_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万行的文本文件,我能够在我的PC上在大约7秒钟内完成整个文件。我更改了系统。out只是在无效(524288)和有效(786432)格式条目的末尾显示一个总计数。“transactions.txt”的大小约为85mb