【问题标题】:Android app csv file getting java.lang.ArrayIndexOutOfBoundsException: length=1; index=1Android 应用程序 csv 文件获取 java.lang.ArrayIndexOutOfBoundsException: length=1;索引=1
【发布时间】:2017-09-11 19:34:53
【问题描述】:

我的原始文件夹中有一个包含多列的 csv 文件,我可以从第一列中读取,这似乎产生了 csv 文件中的所有数据,这不是我想要的,但是在尝试时阅读我得到的下一个:

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

我尝试了不同的方法来编写下面的代码,但我一直得到相同的结果,这是 csv 文件的 sn-p:

OrganisationID OrganisationCode

1421            RV9HE

谁能告诉我我哪里出错了,为什么我总是出错?

Caused by:java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 ?

我正在用这个拉头发,可能是 csv 文件没有列,而我只是从 csv 文件的标题中读取?

private String OrganisationID;
private String OrganisationCode;

public String getOrganisationID() {
    return OrganisationID;
}

public void setOrganisationID(String organisationID) {
    OrganisationID = organisationID;
}

public String getOrganisationCode() {
    return OrganisationCode;
}

public void setOrganisationCode(String organisationCode) {
    OrganisationCode = organisationCode;
}
       while ((line = reader.readLine()) != null) {

            String[] RowData = line.split(",");

            String setId = RowData[0];
            String setCode = RowData[1];

            HospitalReader cur = new HospitalReader();
            cur.setOrganisationID(setId);
            cur.setOrganisationCode(setCode);

            this.add(cur);
        }

【问题讨论】:

  • 没有逗号 (,) 的 sn-p csv 内容如何? :)
  • 什么意思???这是我解析之前的 csv sn-p
  • csv 代表逗号分隔值,典型的 csv 内容看起来像 "1.0.0.0","1.0.0.255","16777216","16777471","AU","Australia" "1.0 .1.0","1.0.3.255","16777472","16778239","CN","China" 所​​以只是确认您的格式是否正常
  • 我了解 CSV 文件的含义,谢谢,那么您是否认为没有逗号以及为什么会出现错误?因为我加了逗号??
  • 所以是的,当你说你可以从 csv 的第一列读取数据时,csv 并没有真正的列。它由“,”和“\n”分隔的文本行..逗号标记列,“\n”或换行符标记行。它与 xlsx 略有不同

标签: java android csv arraylist


【解决方案1】:

我认为您的代码没有任何问题,因此仅举一个示例,希望您能够发现您的输入是否存在问题。

输入内容(xyz.csv):

"OrganisationID","OrganisationCode"
"1421","RV9HE"

代码:取自https://www.mkyong.com/java/how-to-read-and-parse-csv-file-in-java/

    String csvFile = "xyz.csv";
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

            // use comma as separator
            String[] txt = line.split(cvsSplitBy);

            System.out.println(txt[0] + "....." + txt[1]);

        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

输出:

"OrganisationID"....."OrganisationCode"
"1421"....."RV9HE"

【讨论】:

  • 我不明白为什么添加逗号我仍然得到 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 使用上面的代码,为什么我被标记为我的代码和布局好?
【解决方案2】:

您需要在 csv 文件中添加逗号,并删除中间的任何多余的行和空格

"OrganisationID","OrganisationCode",,,,
"1421","RV9HE",,,,

或者如果你想使用同一个文件

OrganisationID OrganisationCode
1421            RV9HE

那你需要把参数改成split方法

String[] RowData = line.split("[ ]+");

【讨论】:

  • 如果您想使用原始文件作为输入,请查看更新后的答案。您需要使用Regex来分割一个或多个空格
  • 不抱歉,如果我在第二行附近尝试捕获 cur.setOrganisationCode(RowData[1]);我捕捉到 ArrayIndexOutOfBoundsException 并且显示显示 2 列而不是所有数据,这要好得多,但仍然不正确,因为我需要捕捉。
猜你喜欢
  • 2019-03-30
  • 1970-01-01
  • 2015-06-03
  • 2023-04-10
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
相关资源
最近更新 更多