简体   繁体   English

如何在不使用第三方库的情况下使用Java中另一个CSV文件中的值创建CSV文件

[英]How to create a CSV file using the values from another CSV file in Java without using third party library

I have a CSV file and I am writing a program to process it. 我有一个CSV文件,正在编写一个程序来处理它。 I am using POJO model. 我正在使用POJO模型。 I can find the sum of amount. 我可以找到金额的总和。 Now I need to write a new CSV file with column Date,Total amount. 现在,我需要写一个新的CSV文件,其列为Date,Total amount。 How can I do this? 我怎样才能做到这一点?

PurchaseDetails.java PurchaseDetails.java

public class PurchaseDetails {

    public static void main(String args[]) {
        BufferedReader br = null;
        double totalamt = 0; 

        final String COMMA_DELIMITER = ",";
        final String NEW_LINE_SEPARATOR = "\n";

        final String FILE_HEADER = "Date,Total amount";
        FileWriter fileWriter = null;

        try {
            br = new BufferedReader(new FileReader("/home/Desktop/Sample.csv"));
            List<Purchase> pList = new ArrayList<Purchase>();

            String line = "";
            br.readLine();

            while ((line = br.readLine()) != null) {
                String[] purchaseDetails = line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");   

                if (purchaseDetails.length > 0) {
                    Purchase purchase1 = new Purchase(purchaseDetails[0], purchaseDetails[1], purchaseDetails[2],
                            purchaseDetails[3], purchaseDetails[4], purchaseDetails[5],
                            purchaseDetails[6], purchaseDetails[7]);
                    pList.add(purchase1);
                }

                String purchase = purchaseDetails[7];
                String purchase1 = purchase.replaceAll("\"", "");
                String purchase2 = purchase1.replaceAll(",", "");
                double d = Double.parseDouble(purchase2);  
                totalamt = totalamt+ d;                 
            }

            DecimalFormat df = new DecimalFormat("#.00");
            String totamount = df.format(totalamt);
            System.out.println("total amount= "+totamount);

            fileWriter = new FileWriter("/home/Desktop/Writecsv.csv");
            fileWriter.append(FILE_HEADER.toString());
            fileWriter.append(NEW_LINE_SEPARATOR);

            for (Purchase purchase : pList) {
                fileWriter.append(purchase.getDate());
                fileWriter.append(COMMA_DELIMITER);
                fileWriter.append(purchase.getAmount());
                fileWriter.append(NEW_LINE_SEPARATOR);
            }

            System.out.println("CSV file created");
        }
        catch(Exception ee)
        {
            ee.printStackTrace();
        }

    }

}

Purchase.java Purchase.java

public class Purchase {

    private String date;
    private String custid;
    private String custname;
    private String sgnid;
    private String sgn_name;
    private String orderno;
    private String skuno;
    private String amount;

    public Purchase(String date, String custid, String custname, String sgnid, String sgn_name, String orderno, String skuno, String amount) {
        super();
        this.date=date;
        this.custid=custid;
        this.custname=custname;
        this.sgnid=sgnid;
        this.sgn_name=sgn_name;
        this.orderno=orderno;
        this.skuno=skuno;
        this.amount=amount;
    }

    public Purchase() {
        // TODO Auto-generated constructor stub
    }

    //setters and getters
}

Here is an abstract CSV writer. 这是抽象的CSV编写器。 You need override 您需要覆盖

String[] extractFields(Object obj) String [] extractFields(Object obj)

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.*;

public abstract class AbstractObjectCSVWriter implements ObjectWriter {
    private static final String CSV_DELIMITER = ",";
    private static final int BUFFER_SIZE = 1024 * 20;

    private final Writer writer;

    public AbstractObjectCSVWriter(String fileName, String... fields) {
        writer = createWriter(fileName);
        writeToFile(StringUtils.join(fields, CSV_DELIMITER));
    }

    private Writer createWriter(String fileName)  {
        try {
            FileOutputStream out = new FileOutputStream(new File(fileName));
            return new BufferedWriter(new OutputStreamWriter(out, "UTF-8"), BUFFER_SIZE);
        } catch (IOException e) {
            throw new IllegalStateException("Can't create writer ", e);
        }
    }

    @Override
    public void write(Object obj) {
        StringBuilder builder = new StringBuilder(IOUtils.LINE_SEPARATOR);
        String[] fields = extractFields(obj);
        for (int i = 0; i < fields.length; i++) {
            builder.append(StringEscapeUtils.escapeCsv(fields[i]));
            if (i != fields.length - 1) {
                builder.append(CSV_DELIMITER);
            }
        }
        writeToFile(builder.toString());
    }

    protected abstract String[] extractFields(Object obj);

    protected void writeToFile(String value) {
        try {
            writer.write(value);
        } catch (IOException e) {
            throw new IllegalStateException("Can't write data to file ", e);
        }
    }

    @Override
    public void close() {
        try {
            writer.close();
        } catch (IOException e) {
            throw new IllegalStateException("Can't close writer ", e);
        }
    }
}

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

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