繁体   English   中英

Java-从文件读取第二行

[英]Java - reading every second line from file

我有一个从文件读取的构造函数,但它每隔一行读取一次。 我该如何解决? 我希望它阅读每一行。 我已经写了一个DataFrame类。 如果您需要更多详细信息,请写。

 public DataFrame(String filename, ArrayList<Class<? extends Value>> dataTypes, boolean header){

    myDatabase = new HashMap<String, ArrayList<Value>>();
    colType = new HashMap<String, Class<? extends Value>>();
    colNames = new String[dataTypes.size()];
    dTypes = new ArrayList<>();
    String [] colHeader;
    String [] values;

    try{
        System.out.println(filename);
        FileInputStream fstream = new FileInputStream(filename);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

        String strLine;

        strLine = br.readLine();
        System.out.println(strLine);

        colHeader = strLine.split(",");



        for(int i = 0 ; i < dataTypes.size() ; i++){

            ArrayList<Value> tempList = new ArrayList<Value>();

            // Initializing database: ColumnName --> ArrayList<Object>
            myDatabase.put(colHeader[i], tempList);

            // Creating mapping: ColumnName --> DataType
            colType.put(colHeader[i], dataTypes.get(i));

            // Creating columnNames table
            colNames[i] = colHeader[i];

            // Creating dataTypes table
            dTypes.add(dataTypes.get(i));
        }


        //  Read File Line By Line
        int counter = 0;
        while ((strLine = br.readLine()) != null) {
            strLine = br.readLine();
            values = strLine.split(",");

            Map<String, Value> myNewRow = new HashMap<String, Value>();

            for(int i = 0 ; i < values.length ; i++){


                if(dTypes.get(i).equals(Integer.class)){
                    Value obj = new Integer(parseInt(values[i]));
                    myNewRow.put(colNames[i], obj);
                } else if (dTypes.get(i).equals(Double.class)){
                    Value obj = new Double(parseDouble(values[i]));
                    myNewRow.put(colNames[i], obj);
                } else if (dTypes.get(i).equals(Float.class)){
                    Value obj = new Float(parseFloat(values[i]));
                    myNewRow.put(colNames[i], obj);
                } else if (dTypes.get(i).equals(Str.class)){
                    Value obj = new Str(values[i]);
                    myNewRow.put(colNames[i], obj);
                } else if (dTypes.get(i).equals(DateTime.class)){
                    DateTime d = new DateTime();
                    DateTime obj = (DateTime) d.create(values[i]);
                    myNewRow.put(colNames[i], obj);

                }

            }

            this.insertRow(myNewRow);

            counter++;

        }



        br.close();
    }
    catch(FileNotFoundException exn){
        System.out.println("File not found");
    }
    catch(IOException ioex){
        System.out.println("Reading exception");
    }

}

您为每次循环迭代两次调用br.readLine()

while ((strLine = br.readLine()) != null) {
        strLine = br.readLine();
...

因此,您正在读取所有行,但是通过第二次调用br.readLine()您将“丢失”其他所有行。

删除第二个br.readLine() ,它应该可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM