【问题标题】:How we can stream a CSV file using Java NIO Api?我们如何使用 Java NIO Api 流式传输 CSV 文件?
【发布时间】:2020-11-13 15:17:21
【问题描述】:

我正在尝试使用 java NIO 流式传输大 CSV 文件,我能够从 CSV 文件中读取数据。请建议我们如何流式传输 CSV 文件的任何示例。我们需要在下面的代码中附加/更改什么代码。

请看下面的代码。

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
 
public class ReadFileWithFixedSizeBuffer 
{
    public static void main(String[] args) throws IOException 
    {
        RandomAccessFile aFile = new RandomAccessFile("airQuality.csv", "r");
 
        FileChannel inChannel = aFile.getChannel();
 
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        while(inChannel.read(buffer) > 0)
        {
            buffer.flip();
            for (int i = 0; i < buffer.limit(); i++)
            {
                System.out.print((char) buffer.get());
            }
            buffer.clear(); // do something with the data and clear/compact it.
        }
 
        inChannel.close();
        aFile.close();
    }
}

任何帮助将不胜感激。 提前致谢!!

【问题讨论】:

    标签: java nio


    【解决方案1】:

    在像CSV 这样的逐行格式文件上使用RandomAccessFile 没有多大意义。

    调用 NIO Files.lines() 会简化你的逻辑,try with resources 会巧妙地清理你的文件处理:

    Path file = Path.of("airQuality.csv");
    
    try(Stream<String> lines = Files.lines(file))
    {
        lines.forEach(line -> {
            // Do something with each line here instead of:
            System.out.println(line);
        });
    }
    

    【讨论】:

    • 你好@DuncG,我有一个疑问。我们可以使用上面的代码实现 CSV 文件流式传输吗??
    • 以上只是一个更清晰的起点,与您的代码示例相同 - 所以不是代码编写服务。如果您想解析 CSV 以将数据提取到另一个数据结构,请查看诸如 Apache CSV commons.apache.org/proper/commons-csv 之类的库
    • 是的,谢谢,知道了,但我的要求不同。首先,我必须创建一个端点,该端点可以从一个位置流式传输 CSV 文件,并在 Spring Boot 应用程序中使用 Java NIO 发回响应。直到我的探索,我还没有找到任何与之相关的示例和示例代码。所以第一件事如果可以的话,是否可以使用 java NIO 流式传输 CSV 文件,那么我们如何实现它??
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2016-12-29
    • 2013-01-03
    • 2015-05-14
    • 2016-08-09
    • 2019-07-19
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多