Java:间歇性分析CSV文件无法读取File中的170K行

时间:2019-04-09 15:14:50

标签: java

我有一个CSV文件,其中包含客户信息,每行一位客户。

该CSV文件的大小约为170,000行。

该应用程序首先逐行分析整个文件,并将每行作为客户对象保存到ArrayList中。这意味着列表的大小也将在170k的数​​量级。

代码如下:

final class CustomerInfoLineProcessor implements LineProcessor<CustomerInfo> {    
    ...
    @Override
    public boolean processLine(final String line) {
        parseLine(line);
        return true;
    }

    private void parseLine(final String line) {
        try {
            if (!line.trim().isEmpty()) {
                  //do job
            }
        } catch (final RuntimeException e) {
            handleLineError(e.getClass().getName() + ": " + e.getMessage(), e, lineStatus);
        }
    }
    ...
}

间歇地发现解析过程在中间异常结束。没有引发错误或运行时异常。整个过程也没有停止。该应用根据ArrayList内部的内容继续做进一步的工作。

一开始,我认为文件中某些位置可能隐藏了一些不可见的字符,这导致进程提前退出。但是,在我的测试机上,同一应用程序对同一文件进行了无问题测试后,排除了这种可能性。

第二个猜测是:内存设置-Xmx256m太小,因此我将其更改为甚至更小的-Xmx128m。该应用程序立即抛出OutOfMemoryError,该应用程序自动终止。它暗示-Xmx256m的内存使用似乎不是问题。

我还没有考虑过其他原因吗?

1 个答案:

答案 0 :(得分:-1)

这是找到的问题。 *每天早晨,客户的应用程序将csv文件通过ftp通过FTP发送给我们; *然后file_sync应用程序开始解析cvs文件; *在启动file_sync应用程序时,有时cvs文件的ftp传输未完成。它引起了问题。

因此,解决方案是在启动file_sync应用之前,确保csv文件未被其他进程打开。