You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何遍历CSV文件读取生成的数组以访问指定值

问题原因

你当前的代码里,processLine方法拆分CSV行得到的splitLine数组是方法内部的局部变量,方法执行完就会被回收,没有做持久化存储,所以main方法里没法直接访问到拆分后的数据。要实现需求,只需要把读取到的所有拆分后的行统一存储到一个集合里,再把这个集合返回给调用方即可。

修改方案
  • 把readFile方法的返回值从void改成List<String[]>,用来存所有拆分后的CSV行数据
  • 调整processLine逻辑,不再内部打印,而是直接返回拆分好的行数组
  • 在main方法里接收readFile返回的集合,就可以随意遍历、访问指定位置的元素了
修改后可直接运行的代码
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class MainMenu
{   
    public static List<String[]> readFile(String file)
    {
        // 存储所有拆分后的CSV行,每个元素是一行拆分得到的字符串数组
        List<String[]> csvData = new ArrayList<>();
        FileInputStream fileStream = null;
        InputStreamReader isr;
        BufferedReader bufRdr;
        int lineNum;
        String line;
        try {
            fileStream = new FileInputStream(file);
            isr = new InputStreamReader(fileStream);
            bufRdr = new BufferedReader(isr);
            lineNum = 0;
            line = bufRdr.readLine();
            while((line != null) && lineNum < 27) {
                lineNum++;
                // 把拆分好的行存入集合
                csvData.add(processLine(line));
                line = bufRdr.readLine();
            }
            
            fileStream.close();
        } catch (IOException e) {
            if(fileStream != null) {
                try {
                    fileStream.close();
                  } catch(IOException ex2) {
                }
            }
             System.out.println("Error: "+e.getMessage());
        }
        return csvData;
    }

    private static String[] processLine(String csvRow)
    {
        // 直接返回拆分后的数组,不在这个方法里做打印逻辑
        return csvRow.split(",");
    }

    public static void main(String[] args) {
        System.out.println("============================================"+"\n"+"Data from CSV file to be analysed:"+"\n");
        List<String[]> csvData = readFile("jrc-covid-19-all-days-of-world_ASSIGNMENT-FIXED.csv");
        System.out.println("============================================");

        // 示例1:遍历所有数据打印
        for (int i = 0; i < csvData.size(); i++) {
            String[] row = csvData.get(i);
            System.out.printf("第%d行内容:", i+1);
            for (String cell : row) {
                System.out.print(cell + " ");
            }
            System.out.println();
        }

        // 示例2:访问指定位置的元素,比如拿第3行(索引2)第2列(索引1)的值
        if (csvData.size() > 2 && csvData.get(2).length > 1) {
            String targetVal = csvData.get(2)[1];
            System.out.println("第3行第2列的值是:" + targetVal);
        }
    }
}
注意事项
  • 用String.split(",")拆分CSV只适用于单元格内容里完全没有逗号的场景,如果CSV单元格本身带包裹在引号里的逗号,这个拆分逻辑会出错,需要换成专门的CSV解析工具处理
  • 访问数组/集合元素前一定要先做长度判断,避免索引越界报错

内容的提问来源于stack exchange,提问作者Francois200212

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:48:14