Java 为什么我的DAO读取.txt文件而不存储所有行数据?

Java 为什么我的DAO读取.txt文件而不存储所有行数据?,java,arraylist,dao,Java,Arraylist,Dao,我是Java新手,目前正在开发一个小型应用程序,可以存储和操作从文本文件读取的城市数据。我有一个DAOTextImpl类,它应该从文本文件中读取数据,选择所有数据行,并将它们存储在要排序的ArrayList中。到目前为止,我只能让它拾取它要存储的4行数据中的3行 有人能看看为什么只有前两组城市数据被提取和存储(2015和2016年) 注意:这是我第一次使用StackOverflow,所以如果我遗漏了什么,请告诉我 代码: 代码中有几个问题 1) 你在状况检查中一个一个地离开了 j

我是Java新手,目前正在开发一个小型应用程序,可以存储和操作从文本文件读取的城市数据。我有一个DAOTextImpl类,它应该从文本文件中读取数据,选择所有数据行,并将它们存储在要排序的ArrayList中。到目前为止,我只能让它拾取它要存储的4行数据中的3行

有人能看看为什么只有前两组城市数据被提取和存储(2015和2016年)

注意:这是我第一次使用StackOverflow,所以如果我遗漏了什么,请告诉我

代码:


代码中有几个问题

1) 你在状况检查中一个一个地离开了


j<(i+noofyeardata)
必须是
j您已经离开了一个-
j
必须是
j@user7感谢您的关注,我设置了上面的内容并再次运行,它适用于前两个城市,但对于巴伦西亚集,它没有获取第四组数据。你知道如何解决这个问题吗?我已经将我前面的观点和另一个bug扩展成了一个答案。在实现这个问题时,我得到了以下错误:线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“2017”位于java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)你知道如何解决这个问题吗?你是否从for循环中删除了
i++
?你能检查文件中的数据是否符合预期格式吗?如果没有,你就不能实现我在最后一点中提到的
public class DaoTextImpl implements DAOInterface {

static final char DELIMITER=',';

@Override
public Repository load(String filename) {

    Repository repository = new Repository();

    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
        String[] temp;
        String line;
        ArrayList<String> lines = new ArrayList<>();
        ArrayList<YearData> yearData = new ArrayList<>();
        while ((line = br.readLine()) != null){
            lines.add(line);
        }
        for (int i = 0; i < lines.size(); i++) {
            temp = lines.get(i).split(Character.toString(DELIMITER));
            if (temp.length == 4) {
                int id = Integer.valueOf(temp[0]);
                String cityName = stripQuotes(temp[1]);
                String country = stripQuotes(temp[2]);
                int noofyeardata = Integer.valueOf(3);

                for (int j = (i + 1); j < (i + noofyeardata); j++) {
                    String[] yearDataArray = lines.get(j).split(Character.toString(DELIMITER));
                    String year = stripQuotes(yearDataArray[0]);
                    float precipitation = Float.valueOf(yearDataArray[1]);
                    int maxtemp = Integer.valueOf(yearDataArray[2]);
                    int mintemp = Integer.valueOf(yearDataArray[3]);
                    int windspeed = Integer.valueOf(yearDataArray[4]);
                    String winddirection = stripQuotes(yearDataArray[5]);
                    yearData.add(new YearData(year, precipitation, maxtemp, mintemp, windspeed, winddirection));
                }
                repository.add(new City(id, cityName, country, yearData));
            }
        }

    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return repository;
}
1,"Cartagena","Spain",3
"2015",0.2,33,26,6,"S"
"2016",0.0,33,24,8,"SSW"
"2017",0.0,32,25,6,"E"
2,"Glasgow","Scotland",3
"2015",0.0,19,8,3,"SE"
"2016",0.1,21,11,6,"SE"
"2017",2.1,19,11,9,"SW"
3,"Valencia","Spain",4
"2015",0.0,34,24,6,"SE"
"2016",0.0,39,23,5,"SSE"
"2017",0.0,32,24,5,"E"
"2014",0.0,29,20,6,"ESE"
for (int i = 0; i < lines.size();) {
        temp = lines.get(i).split(Character.toString(DELIMITER));
        int id = Integer.valueOf(temp[0]);
        String cityName = stripQuotes(temp[1]);
        String country = stripQuotes(temp[2]);
        int noofyeardata = Integer.valueOf(temp[3]);

        for (int j = (i + 1); j <= (i + noofyeardata); j++) {
           //your existing code
        }
        repository.add(new City(id, cityName, country, yearData));
        i += noofyeardata + 1;
    }
}
<id>, <cityName>, <country>, <noofyeardata1>
<noofyeardata1 rows>
<id>, <cityName>, <country>, <noofyeardata2>
<noofyeardata2 rows>
....