当前位置: 首页 > 面试题库 >

Java中的txt文件格式验证

陈扬
2023-03-14
问题内容

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

  • 实际上,.txt文件而不是仅具有扩展名的其他类型的文件已更改。

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

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


问题答案:

听起来您正在寻找一种通用的格式设置选项,我可以为您推荐正则表达式吗?您可以使用正则表达式进行各种不同类型的匹配。我在下面写了一个简单的示例[对于所有那些正则表达式专家,如果我不使用完美的表达方式,请多多怜悯我;)]。您可以将REGEX和MAX_LINES_TO_READ常量放入属性文件中,并对其进行修改以使其更通用。

您基本上可以测试“ .txt”文件中的最大行数(但是,建立格式需要很多行是好的-
您也可以对标题行使用正则表达式,或者根据需要使用多个不同的正则表达式来测试格式),如果所有这些行都匹配,则文件将被标记为“有效”。

这只是您可以运行的一个示例。除了仅捕获“ Exception”以外,还应该实现适当的异常处理。

对于用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)

EDIT 12/29/2011大约10:00 am
不知道是否存在性能问题,但是就像供参考之用,我多次复制“
transactions.txt”中的条目以构建一个大约130万行的文本文件在其中,我可以在PC上大约7秒内浏览整个文件。我将System.out更改为仅在无效(524,288)和有效(786,432)格式的条目末尾显示总计。“
transactions.txt”的大小约为85mb。



 类似资料:
  • 问题内容: 我编写的代码应该覆盖所选文本文件的内容,但是会附加它。我到底在做什么错? 编辑 我尝试制作一个新的temp.txt文件并将新内容写入其中,删除此文本文件并将temp.txt重命名为该文件。事实是,删除总是不成功的。我认为我不必为此更改用户权限吗? 另外,程序的一部分列出了该目录中的所有文件,因此我猜它们正在被程序使用,因此无法删除。但是为什么不覆盖呢? 解决了 我最大的“ D’oh”时

  • 问题内容: 我会尽量保持清楚,但如果我的问题不完美,请原谅我。我有一个包含多行数据的txt文件。例: 123拉尔夫·玻色20000 200 1 2 256 ed shane 30000 100 2 4 … 我需要按顺序读取每一行,并将其传递回单独类中的方法进行处理。我知道如何通过使用StringTokenizer将每一行分解为元素。 但是,我不确定如何一次读取一行,将元素传递回另一类,然后在完成处

  • 我有一个案例,我有3个单独的文件上传单个输入。如果用户选择了图像格式文件(png、jpg、jpeg),那么他/她必须需要选择图像格式的所有三个文件输入(png、jpg、jpeg)。 如果用户选择了pdf文件,那么他/她必须只需要上传pdf格式的文件。 因此,任何用户都可以上传所有图像(png、jpg、jpeg)或PDF,但不能同时上传两者。我用过 rejex获取文件的文件扩展名,然后我正在使用许多

  • 问题内容: 为了有效地利用Hadoop中的 map- reduce作业,我需要将数据以hadoop的序列文件格式存储。但是,当前数据仅是平面.txt格式。有人可以建议我将.txt文件转换为序列文件的方法吗? 问题答案: 因此,最简单的答案就是只有一个具有SequenceFile输出的“身份”工作。 在Java中看起来像这样:

  • 我的项目中有这样一段代码: 没有错误,应用程序运行正常,但是变量中从来没有任何文本,我确信txt文件中有文本! 我已经尝试过不同的方法来读取文本文件(使用BufferedReader、Scanner、FileInputStream和FileReader),但都不起作用。 另外,我几乎可以肯定问题不在变量中,因为我尝试通过代码(使用运行时)打开文件,它正常打开了正确的文件。 好的,我尝试添加,但是仍

  • 我正试图编写一个程序,读取网络中相互交互的节点列表。它以以下格式写入文本文件: 这表示节点1与节点2和节点3交互,节点2仅与节点3交互,等等。 该程序将能够读取该文件,并将删除任何重复的交互,并且如果我输入节点的名称,将能够向我返回节点与其他节点的交互次数。然而,我对Java非常陌生,我首先尝试让它读入文件,尽管我的代码目前没有读入文件。以下是我迄今为止的代码: 任何关于如何解决此问题的帮助都将不