有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java读取fom CSV并将数据存储到ArrayList

我正在使用OpenCSV读取存储在设备内部存储器中名为product.csv\G Shop\Input CSV\的CSV文件。该文件包含一列随机的产品名称。我想将每个产品存储到ArrayList中,但我的代码不起作用

代码如下:

String baseDirectory = 安卓.os.Environment.getExternalStorageDirectory().getAbsolutePath();
File readCsvFolder = new File(baseDirectory + File.separator + "G Shop" + File.separator + "Input CSV" + File.separator);
String readFileName;
String readFilePath;
List<String[]> readData;

void readCSV() {
    readCsvFolder.mkdirs();

    readFileName = "products.csv";
    readFilePath = readCsvFolder.getPath() + File.separator + readFileName;
    try {
        ArrayList<String> searchProducts = new ArrayList<>();

        readData = new ArrayList<String[]>();
        CSVReader reader = new CSVReader(new FileReader(readFilePath));
        readData = reader.readAll();

        String[] row;
        while ((row = reader.readNext()) != null) {
            searchProducts.add(row[0]);

            //This Toast never shows up!
            Toast.makeText(mainActContext,"Saved : " + row[0],Toast.LENGTH_SHORT).show();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我没有看到任何错误或警告,调用该方法后根本没有输出。我将非常感谢任何形式的帮助或建议:)


共 (1) 个答案

  1. # 1 楼答案

    readData = reader.readAll();正在读取整个文件输入流,直到文件结束。因此row = reader.readNext()) != null从一开始就不会给你任何东西;读取器已经到达文件的末尾。相反,您的循环可以是:for(String[] row:readData)

    for(String[] row:readData) {
        searchProducts.add(row[0]);
    
        //Now the toast shows up!
        Toast.makeText(mainActContext,"Saved : " + row[0],Toast.LENGTH_SHORT).show();
    }