将.csv文件中的数据导入对象的数组列表

时间:2017-03-05 22:53:04

标签: java arrays csv object arraylist

以下是我正在使用的.csv文件的格式 -

Hostname,IP Address,Patched?,OS Version,Notes
A.example.COM,1.1.1.1,NO,11,Faulty fans
b.example.com,1.1.1.2,no,13,Behind the other routers so no one sees it
C.EXAMPLE.COM,1.1.1.3,no,12.1   
d.example.com,1.1.1.4,yes,14    
c.example.com,1.1.1.5,no,12,Case a bit loose
e.example.com,1.1.1.6,no,12.3   
f.example.com,1.1.1.7,No,15,Guarded by sharks with lasers on their heads

我目前有这个程序,它将上述.csv文件中的所有数据读入数组列表,然后将结果输出到控制台,如包含的输出文本中所示。理想情况下,我最终需要能够将每个不同行中的每个不同字段相互比较,执行计算等,因此希望将每一行保存为数组列表中的对象。我试过这样做但到目前为止没有成功。是否有一种简单的方法来修改我的程序来执行此操作?另外,如果可能的话,我希望标题和说明不被包括在内。这是我到目前为止的代码 -

package crunchify;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class CrunchifyCSVtoArrayList {

    public static void main(String[] args) {

        BufferedReader crunchifyBuffer = null;

        try {
            String crunchifyLine;
            crunchifyBuffer = new BufferedReader(new FileReader("Crunchify-CSV-to-ArrayList.csv"));

            while ((crunchifyLine = crunchifyBuffer.readLine()) != null) {
                System.out.println("ArrayList data: " + crunchifyCSVtoArrayList(crunchifyLine) + "\n");
            }

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

    // Utility which converts CSV to ArrayList using Split Operation
    public static ArrayList<String> crunchifyCSVtoArrayList(String crunchifyCSV) {
        ArrayList<String> crunchifyResult = new ArrayList<String>();

        if (crunchifyCSV != null) {
            String[] splitData = crunchifyCSV.split("\\s*,\\s*");
            for (int i = 0; i < splitData.length; i++) {
                if (!(splitData[i] == null) || !(splitData[i].length() == 0)) {
                    crunchifyResult.add(splitData[i].trim());
                }
            }
        }
        return crunchifyResult;
    }
}

当前输出:

ArrayList数据:[主机名,IP地址,已修补?,操作系统版本,注释]

ArrayList数据:[A.example.COM,1.1.1.1,NO,11,有毛病的粉丝]

ArrayList数据:[b.example.com,1.1.1.2,no,13,在其他路由器后面,所以没有人看到它]

ArrayList数据:[C.EXAMPLE.COM,1.1.1.3,no,12.1]

ArrayList数据:[d.example.com,1.1.1.4,是,14]

ArrayList数据:[c.example.com,1.1.1.5,no,12,Case有点松散]

ArrayList数据:[e.example.com,1.1.1.6,no,12.3]

ArrayList数据:[f.example.com,1.1.1.7,No,12.2]

ArrayList数据:[g.example.com,1.1.1.6,不,15,由头上戴着激光的鲨鱼守卫]

为了更详细地介绍我最终需要做的事情,需要打印出哪些路由器需要更新,例如:如果任何路由器低于版本12,则打印出那些需要更新的路由器。

1 个答案:

答案 0 :(得分:0)

您应该创建一个自定义类来保存数据。此类的对象表示csv文件中的单行。