【问题标题】:Java library to read csv and sppecify custom delimiter more than 1 char(string) "|%|"用于读取 csv 并指定超过 1 个字符(字符串)“|%|”的自定义分隔符的 Java 库
【发布时间】:2021-06-22 02:18:02
【问题描述】:

需要读取带有自定义字符串分隔符的 csv 文件,例如“|%|”。目前我正在使用 CSV 公共库,但它只允许按字符而不是字符串拆分。我更喜欢通过坚持使用 CSV 公共库进行拆分,但也对其他库开放。

【问题讨论】:

标签: java csv file-io


【解决方案1】:

如果 CSV 文件使用不同的分隔符,而不是默认分隔符(即逗号),则可以轻松配置 CSVFormat 来处理它。 假设文件用连字符分隔:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;

public class CSVReaderWithDifferentDelimiter {
    public static void main(String[] args) throws IOException {
        String csvFilePath = "../csvFileWithDiffDelimiter.csv";

        Reader reader = Files.newBufferedReader(Paths.get(csvFilePath));
        CSVFormat csvFormat = CSVFormat.newFormat('-')
                .withFirstRecordAsHeader();

        CSVParser csvParser = csvFormat.parse(reader);
        csvParser.getRecords()
                .forEach(csvRecord -> System.out.println(csvRecord.toMap()));
    }
}

请注意,我们不再使用 DEFAULT CSVFormat,而是从头开始构建。我们将分隔符作为新的格式方法参数传递。记录分隔符、转义序列等其余配置将默认设置。

【讨论】:

  • 我想将分隔符指定为字符串而不是字符,您给出的示例是“-”字符。我想使用字符串“|%|”。再次感谢您的帮助。
【解决方案2】:

您需要通过用户定义的分隔符(字符串而不是字符)读取 CSV 文件。在 Java 中这样做是迂回的。但是使用 SPL(一个开源 Java 包)来完成这项工作非常简单。一行代码就够了:

A
1 =file("custom.csv").import@t(;,"|%|")

SPL 提供 JDBC 驱动程序供 Java 调用。只需将上述 SPL 脚本存储为 readcsv.splx 并在调用存储过程时在 Java 中调用它:

…
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
st=con.prepareCall("call readcsv ()");
st.execute();
…

或者在我们执行 SQL 语句时在 Java 程序中执行 SPL 字符串:

…
st = con.prepareStatement("==file(\"custom.csv\").import@t (;,\"|%|\")");
st.execute();
…

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2019-01-26
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多