Chaitanya Ghumare
Chaitanya Ghumare

Reputation: 381

How to create pojo classes from CSV header

I have CSV file which contains field names like firstName,LastName,salary,etc.. from this file I want to generate pojo class.there is no datatype information in CSV file so consider all fields are as String type. Is there any way to create pojo class at build time from csv file?

below is CSV file.

employees.csv

empId,firstName,lastName,title,salary 

from this I want to generate pojo as below

class employees{
   private string empId;
   private string firstName;
   private string lastName;
   private string title;
   private string salary;

   // getters and setters 
    .
    .
    .
   //toString() method
}

Upvotes: 1

Views: 6772

Answers (2)

Chaitanya Ghumare
Chaitanya Ghumare

Reputation: 381

finally I got solution for this according to requirement I am creating pojo class manually by setting classname,parentDirectory,packageName,and CSV file.it will create .java in specified directory file with fields,setter,getters and toString method.but it will work if only one header row is in file.
code is below

 public static void createPojoFromCsvHeader(File csvInputFile,String directoryOfjavaFile,String packageName,String className)
  {    
      try(BufferedReader stream = new BufferedReader(new FileReader(csvInputFile))) {
        String packagePath=packageName.replace(".","/");
        String javaOutputDirPath=directoryOfjavaFile+"/"+packagePath+"/";
        System.out.println("creating directory ->"+javaOutputDirPath);
        File f=new File(javaOutputDirPath);
        if(f.mkdirs()){
            System.out.println("directory :"+javaOutputDirPath+" created succesfully..");
        }else{
            System.out.println("directory :"+javaOutputDirPath+" already exist..");
        }
        String javaOutputFilePath=directoryOfjavaFile+"/"+packagePath+"/"+className+".java";
        File javaOutPutFile=new File(javaOutputFilePath);
        javaOutPutFile.createNewFile();
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(javaOutputFilePath)));          
        System.out.println("generating class..");            
        out.println("package "+packageName+";");
        out.println("public class " + className + " {");
        String line = null;
        String[] fields = null;
        int rowNum = 0;
        while ((line = stream.readLine()) != null) {
            if (line.isEmpty() || line.startsWith("#")) {
                continue;
            } else {
                if (fields == null) {
                    fields = line.split(",");
                }

                rowNum++;
                String[] values = line.split(",");
                for (int i = 0; i < fields.length; i++) {
                    out.println("\t\tprivate String " + fields[i] + " = \""+ StringEscapeUtils.escapeJava(values[i])+ "\";");
                }

                for (int i = 0; i < fields.length; i++) {
                    String tempField=StringEscapeUtils.escapeJava(values[i]).substring(0, 1).toUpperCase()+StringEscapeUtils.escapeJava(values[i]).substring(1);

                    //getter method
                    out.println("");
                    out.println("\t\tpublic String  get"+tempField+ "(){");
                    out.println("\t\t\treturn this."+StringEscapeUtils.escapeJava(values[i])+";");
                    out.println("\t\t}");
                    //setter method
                    out.println("\t\tpublic void  set"+tempField+"(String "+ StringEscapeUtils.escapeJava(values[i])+"){");
                    out.println("\t\t\t this."+StringEscapeUtils.escapeJava(values[i])+" = "+ StringEscapeUtils.escapeJava(values[i])+";");
                    out.println("\t\t}");
                }

                out.println("");
                out.println("// toString() Method");
                out.println("\t\t public String toString(){");
                StringBuffer buffer=new StringBuffer();
                buffer.append("\"{");
                for (int i = 0; i < fields.length; i++) {
                    buffer.append("\\\""+StringEscapeUtils.escapeJava(values[i])+"\\\"=\"+"+StringEscapeUtils.escapeJava(values[i]));
                    if(i < fields.length-1){
                        buffer.append("+\",");
                    }
                    else{
                        buffer.append("+\"");
                    }
                }
                buffer.append("}\";");
                out.println("\t\t\t return "+buffer);
                out.println("\t\t}");
            }
            out.println("}");
            out.close();
        }
        System.out.println("no of lines fetch from csv :"+rowNum);
        }catch(IOException e)
      {
            e.printStackTrace();
      }

  } 

Upvotes: 2

SyntaX
SyntaX

Reputation: 2120

You can use OpenCSV to process your CSV files and use javassist to dynamically create the Java Classes.

There are examples on their respective websites.

I strongly recommend to look into stackoverflow thread - Generate java class from csv file

I hope it helps!

Upvotes: 1

Related Questions