基于java中的列值拆分csv文件

时间:2014-04-09 12:59:30

标签: java csv drools

我想根据列值将csv文件拆分成多个csv文件  csv文件的结构:名称,Id,部门,课程

abc,1,CSE,Btech 
fgj,2,EE,Btech 

(行不分开;最后)

如果Dept的值是CSE或ME,则将其写入file1.csv,如果值为ECE或EE将其写入file2.csv,依此类推。

我可以为此目的使用drools吗?我不知道流口水。

有什么帮助可以做到吗?

这就是我所做的:

public void run() {

    String csvFile = "C:/csvFiles/file1.csv";
    BufferedReader br = null;
    BufferedWriter writer=null,writer2=null;
    String line = "";
    String cvsSplitBy = ",";
    String FileName = "C:/csvFiles/file3.csv";
    String FileName2 = "C:/csvFiles/file4.csv";

    try {

        writer = new BufferedWriter(new FileWriter(FileName));
        writer2 = new BufferedWriter(new FileWriter(FileName2));
        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {

               String[] values=line.split(cvsSplitBy);

            if(values[2].equals("CSE"))
            {
                writer.write(line);
            }
            else if(values[2].equals("ECE"))
            {
                writer2.write(line);
            }


        }

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

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

1)首先使用标题行查找列索引,或者如果标题不存在,则按索引

查找

2)遵循下面的算法,该算法将得到键值的映射,其中键是执行拆分的列

全局resultMap;

Method add(key,row) {
        data = (resultMap.containsKey(key))? resultMap.get(key):new ArrayList<String>();
        data.add(row);
        resultMap.put(key, data );
    }

Method getSplittedMap(List rows) {
        for (String currentRow : rows) {
            add(key, currentRow);
        }
        return resultMap;
    }

希望这会有所帮助。

答案 1 :(得分:-2)

FileOutputStream f_ECE = new FileOutputStream("provideloaction&filenamehere");
FileOutputStream f_CSE_ME = new FileOutputStream("provideloaction&filenamehere");
FileInputputStream fin = new FileinputStream("provideloaction&filenamehere");
int size = fin.available(); // find the length of file
byte b[] = new byte[size];
fin.read(b);
String s = new String(b); // file copied into string
String s1[] = s.split("\n");
for (int i = 0; i < s1.length; i++) {
    String s3[] = s1[i].split(",")
    if (s3[2].equals("ECE"))
        f_ECE.write(s1.getBytes());
    if (s3[2].equals("CSE") || s3.equals("EEE"))
        f_CSE_ME.write(payload.getBytes());
}