在Java中处理文件中的大量记录

在Java中处理文件中的大量记录,java,Java,我在CSV文件中有一百万条记录,其中有3列id、firstName、lastName。我必须用java处理这个文件,并验证id是否唯一,firstName是否为null。如果存在id不唯一和/或firstName为null的情况,则我必须将这些记录写入一个输出文件中,其中包含第四列,因为reasonid not unique/firstName为null。表现应该是好的。请建议最佳有效的方法。您可以使用集合数组列表将其中的所有ID存储在一个循环中,并检查它是否不存在。如果没有,请将其写入文件中

我在CSV文件中有一百万条记录,其中有3列id、firstName、lastName。我必须用java处理这个文件,并验证id是否唯一,firstName是否为null。如果存在id不唯一和/或firstName为null的情况,则我必须将这些记录写入一个输出文件中,其中包含第四列,因为reasonid not unique/firstName为null。表现应该是好的。请建议最佳有效的方法。

您可以使用集合数组列表将其中的所有ID存储在一个循环中,并检查它是否不存在。如果没有,请将其写入文件中

代码应如下所示:

if(!idList.contains(id)){
    idList.add(id);
}else{
    writer.write(id);
}

对于从CSV文件中读取的所有记录,上述代码应该在一个循环中工作。

您可以使用OpenCsv jar实现指定的目的。它是在Apache2.0许可下的。 您可以从

下面是相同的代码

Reader Reader=Files.newbufferederpaths.getINPUT\u SAMPLE\u CSV\u FILE\u PATH; CSVReader CSVReader=新的CSVReaderreader

    Writer writer = Files.newBufferedReader(Paths.get(OUTPUT_SAMPLE_CSV_FILE_PATH));
    CSVWriter csvWriter = new CSVWriter(writer);

    List<String[]> list = csvReader.readAll();
    for (String[] row : list) {
        //assuming First column to be Id
        String id = row[0];
        //assuming name to be second column
        String name = row[1];
        //assuming lastName to be third column
        String lastName = row[2];

        //Put your pattern here
        if(id==null || !id.matches("pattern") || name==null || !name.matches("pattern")){
            String[] outPutData = new String[]{id, name , lastName, "Invalid Entry"};
            csvWriter.writeNext(outPutData);
        }
    }

让我知道这是否有效,或者您是否需要进一步的帮助或澄清。

如果您想要一个性能良好的算法,您不应该使用ArrayList.ContainesElement,正如这里解释的,在复杂性上使用。相反,我建议您使用HashSet作为HashSet。containseElement操作具有O1复杂性。简而言之,使用ArrayList可以进行1000000^2次操作,而使用HashSet可以进行1000000次操作

在伪代码中,为了不泄露完整答案并让您自己找到答案,我会这样做:

File outputFile
String[] columns
HashSet<String> ids
for(line in file):
    columns = line.split(',')
    if(ids.contains(columns.id):
        outputFile.append(columns.id + " is not unique")
        continue
    if(columns.name == null):
        outputFile.append("first name is null!")
        continue
    ids.add(columns.id)

你试过什么?这很好。但我在寻找一些系统内存无法处理一百万条记录的东西。@bhaskar narula它到底意味着什么?请提供更多的澄清,并用文件大小或记录数或您特别面临的其他问题更新您的查询。这很好。但我正在寻找一些系统内存无法处理一百万条记录的地方。然后我建议您将唯一ID存储在一个排序的临时文件中,并且每当您需要另一条记录时,您都会以logn复杂度对其进行二进制搜索。在这种情况下,您不使用ram,只使用磁盘空间。谢谢,更安全。这很有帮助。但我正在寻找系统内存无法处理数百万条记录的地方。