如何读写CSV文件并将数据处理成Java数组?

ux6nzvsh  于 2023-07-31  发布在  Java
关注(0)|答案(2)|浏览(160)

我正在做一个Java项目,我需要处理CSV文件。具体来说,我需要读写CSV文件,并将数据处理到数组中,以便进一步操作。我研究了不同的库和方法,但我不确定最佳选择以及如何正确实现它,特别是在将CSV数据有效存储到数组中时。
我已经探索了在Java中处理CSV文件的各种库和方法,但我还没有能够确定阅读、写入CSV数据并将其处理到数组中的最高效和最有效的解决方案。我已经尝试了一些实现,但没有得到预期的结果,或者遇到了性能问题。
如果有人能给我提供一个简单的例子,并解释推荐的方法来有效地读取,写入和处理CSV文件到Java数组中,我将不胜感激。

yizd12fk

yizd12fk1#

欢迎使用堆栈溢出!
指导方针说,要求图书馆推荐的问题和要求意见的问题是不合适的。所以你的问题可能会因为其中一个或两个原因而关闭。
然而,我将尝试回答您的问题,但需要注意的是,下面的方法不一定是读取CSV数据的“最佳”或“最有效”方法,特别是因为它一次性将所有CSV数据读取到内存中,并且如果您尝试读取的文件大于(应用程序)可用内存,则可能导致内存不足问题。YMMV
我使用的是“OpenCSV”库
例如,在一个示例中,

CSVReader csvReader = new CSVReader(new FileReader(inputFilename));
List<String[]> data = csvReader.readAll();

字符串
列表中的每一项都是一行,行的String[]中的每一项都是该行的列值。

e0uiprwp

e0uiprwp2#

这取决于你的数据。
如果您的数据可能包含逗号,则 CSV 可能是微不足道的。
您可以实现 TSV,它使用 tab 字符。

  • Wikipedia – Delimiter-separated values*。
  • "...如果有人能提供一个简单的例子,并解释推荐的方法,在Java中高效地读取、写入CSV文件并将其处理成数组,我将不胜感激。"*

这里是一个基本的读写,使用 TSV 结构。

void append(String[] strings, File file) throws IOException {
    try (FileWriter writer = new FileWriter(file, true)) {
        writer.write(String.join("\t", strings));
        writer.write(System.lineSeparator());
    }
}

List<String[]> read(File file) throws IOException {
    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
        List<String[]> list = new ArrayList<>();
        String line;
        while ((line = reader.readLine()) != null)
            list.add(line.split("\t", -1));
        return list;
    }
}

字符串
这里有一个用法。

File file = new File("files/data.tsv");
append(new String[] { "a", "b", "c" }, file);
append(new String[] { "d", "e", "f" }, file);
List<String[]> list = read(file);
for (String[] strings : list)
    System.out.println(Arrays.toString(strings));

  • data.tsv * 的内容
a   b   c
d   e   f


输出量

[a, b, c]
[d, e, f]

相关问题