Java 如何有效地更改csv文件中的分隔符?

Java 如何有效地更改csv文件中的分隔符?,java,csv,Java,Csv,我有一个csv文件。当前分隔符为。我想将所有逗号替换为| 当然,我所说的所有逗号都是指那些用作分隔符的逗号。例如,某些文本的双引号内的逗号,文本不是分隔符,不应替换为| 基本上这是一个非常简单的任务,要做的Excel是文件很小。但是如果它很大,那么呢?最有效的方法是什么 我可以使用OpenCSVAPI,但是逐行读取太慢了,我的数据集太大了 或者我可以使用一个缓冲读取器,它也很慢,因为它逐行读取 有没有更有效的方法将分隔符文件转换为|文件 附言:我有一个代码,我没有张贴在这里。它基本上是逐行阅读。

我有一个csv文件。当前分隔符为。我想将所有逗号替换为|

当然,我所说的所有逗号都是指那些用作分隔符的逗号。例如,某些文本的双引号内的逗号,文本不是分隔符,不应替换为|

基本上这是一个非常简单的任务,要做的Excel是文件很小。但是如果它很大,那么呢?最有效的方法是什么

我可以使用OpenCSVAPI,但是逐行读取太慢了,我的数据集太大了

或者我可以使用一个缓冲读取器,它也很慢,因为它逐行读取

有没有更有效的方法将分隔符文件转换为|文件

附言:我有一个代码,我没有张贴在这里。它基本上是逐行阅读。我甚至尝试了多线程,但我的50000000行仍然在一小时内被转换,这真是太慢了

请看一看

你问的是一个非常具体的解决方案,而不是一个字一个字地提到实际问题

问自己两个问题:

一,。为什么CSV具有错误的分隔符?你能在这一代人中改变这一点吗

二,。为什么应用程序要求CSV文件具有特定的分隔符,而不是让用户定义文件中使用的分隔符?

请查看

你问的是一个非常具体的解决方案,而不是一个字一个字地提到实际问题

问自己两个问题:

一,。为什么CSV具有错误的分隔符?你能在这一代人中改变这一点吗


二,。为什么应用程序要求CSV文件具有特定的分隔符,而不是让用户定义文件中使用的分隔符?

您基本上有两种选择:

编写自己的CSV解析器 使用现有的CSV库 对于1,如果数据集中的所有记录各有一行,则可以使用BufferedReader类的readLine方法读取它们,对于每个记录行,可以逐个字符读取/写入,确保不替换转义分隔符,例如引号内的逗号。如果数据集有复杂的特殊情况,如多行记录或其他类型的转义字符,例如“\,”,请不要尝试1并遵循最佳方法,在所有情况下都是2

CSV库选择了一个在字段之间保留空格的库,例如,它允许您以每秒数十或几十万条记录的速度快速读取所有记录,这取决于一条记录有多少个字段,并提取所有字段,然后您需要通过将这些字段合并到记录中来将其重写到磁盘上,由新分隔符分隔


整个任务不需要1小时。它应该在15英寸左右就可以实现。

您基本上有两种选择:

编写自己的CSV解析器 使用现有的CSV库 对于1,如果数据集中的所有记录各有一行,则可以使用BufferedReader类的readLine方法读取它们,对于每个记录行,可以逐个字符读取/写入,确保不替换转义分隔符,例如引号内的逗号。如果数据集有复杂的特殊情况,如多行记录或其他类型的转义字符,例如“\,”,请不要尝试1并遵循最佳方法,在所有情况下都是2

CSV库选择了一个在字段之间保留空格的库,例如,它允许您以每秒数十或几十万条记录的速度快速读取所有记录,这取决于一条记录有多少个字段,并提取所有字段,然后您需要通过将这些字段合并到记录中来将其重写到磁盘上,由新分隔符分隔


整个任务不需要1小时。如果在Java中使用BufferedReader和BufferedWriter,应该可以在大约15分钟内完成。

您应该接近磁盘速度。否则,请使用本机工具-对于Linux,awk或perl都是不错的选择。您是否尝试分析您的代码?也许某个地方有一个小小的瓶颈。如果它真的是一个文件,那么它意味着一个,谁会关心效率呢?即使文件很大,你只需要做一次。我唯一能想到的就是加快MMAP文件的速度,这可能意味着用C或C++重写。但是我同意@AdamArold的观点,你应该通过分析来了解你的程序在哪里花费时间。逐行阅读你应该获得大约90MB/秒的速度,而5000万行大约需要一分钟。问题很可能是您对生产线的处理。顺便说一句,您可以读取原始字节并更快地更改它们。显然,CSV并不是存储大型数据集的最有效方式,因此您不能期望它的速度很快。如果您在Java中使用BufferedReader和BufferedWriter,您应该接近磁盘速度。否则,请使用本机工具-对于Linux,awk或perl都是不错的选择。您是否尝试分析您的代码?也许某个地方有一个小小的瓶颈。如果它真的是一个文件,那么a意味着一个,w
谁在乎效率?即使文件很大,你只需要做一次。我唯一能想到的就是加快MMAP文件的速度,这可能意味着用C或C++重写。但是我同意@AdamArold的观点,你应该通过分析来了解你的程序在哪里花费时间。逐行阅读你应该获得大约90MB/秒的速度,而5000万行大约需要一分钟。问题很可能是您对生产线的处理。顺便说一句,您可以读取原始字节并更快地更改它们。显然,CSV并不是存储大型数据集的最有效方式,因此您不能期望它速度快。