在java中读取并解析CSV文件

时间:2016-09-17 11:34:23

标签: java email csv

我有两个csv文件 CSV File1 = csvFrom,//它有两列,column1 = Email(只有5封电子邮件),Column2 =密码
CSV File2 = csvSendTo //它只有一列=电子邮件。 (成千上万的电子邮件)。

我正在尝试读取csvFrom文件,我想从第一个文件中获取第一个电子邮件ID和密码。然后从第二个csvSendTo文件发送20封电子邮件。想要从第一封电子邮件ID和密码发送电子邮件到这20封电子邮件。我能够通过一个电子邮件ID手动发送电子邮件。但是当我尝试从csv文件中读取它时,它给了我一个NullPointerException。下面是我的代码:我只是粘贴在这里的部分,这给了我一个错误。谁能指导我在这里?这个for循环在这里是错误的,但我有点困惑,所以无法用精确的循环替换。

    BufferedReader br1=null;
    BufferedReader br2=null;
    String line1="",line2="";
    String csvSplitBy=",";
    String strMailFrom="",strPassword="";
    int countCSVFrom=0,countCSVSendTo=0;
    System.out.println("strCSVFrom=" + strCSVFrom + ", strcsvSendTo=" + strCSVSendTo);
    try{
      br1=new BufferedReader(new FileReader(strCSVFrom));
      br2=new BufferedReader(new FileReader(strCSVSendTo));
       String[] strarrFromEmail;
      while((line1=br1.readLine())!=null){
          countCSVFrom+=1;
          strarrFromEmail=line1.split(csvSplitBy);
         // for(int i=countCSVFrom-1;i<=countCSVFrom;i++){
         //     strMailFrom=strarrFromEmail[i];
         //     strPassword=strarrFromEmail[i+1]; //While here its ArrayIndexOutOfBounds Exception
         // } 
         //what is the correct thing to write it over here instead of for loop?
      }
      System.out.println("countcsvfrom="+countCSVFrom + ", line1=" + line1.toString()); //Giving me an error of NullPointerException over here. 

      System.out.println("strFrom="+strMailFrom + ", strPassword="+strPassword);
      while((line2=br2.readLine())!=null){
          countCSVSendTo+=1;
      }
      System.out.println("countcsvsendto="+countCSVSendTo);
    }catch(FileNotFoundException fnfe){
      fnfe.printStackTrace();
    }catch(IOException ioe){
      ioe.printStackTrace();
    }

2 个答案:

答案 0 :(得分:1)

第二个System.out.println,就在第一个while循环的右括号之后,给出了NPE。它使用line1,该while循环保证的终止条件在此时为null

答案 1 :(得分:0)

你可以写:

//your code here and try catch block below
try {
    List<String[]> csvLines = new ArrayList<String[]>();
    Files.lines(Paths.get(strCSVFrom)).map(e -> e.split(csvSplitBy)).forEach(csvLines.add(e));
} catch (Exception) {
     //exception handling
}