使用OpenCSV在Java中编写CSV文件

逗号分隔值(CSV)文件只是一个普通的纯文本文件,将数据逐列存储,并用分隔符(例如,通常是逗号“,”)分隔。

null

OpenCSV是一个用于Java的CSV解析器库。OpenCSV支持您想要执行的所有基本CSV类型操作。Java 7目前是OpenCSV支持的最低版本。Java语言不提供任何本机支持来有效地处理CSV文件,所以我们使用OpenCSV来处理Java中的CSV文件。

如何在项目中添加OpenCSV?

  • 对于maven项目,可以在pom中包含OpenCSV maven依赖项。xml文件。

    < dependency >
    < groupId >com.opencsv</ groupId >
    < artifactId >opencsv</ artifactId >
    < version >4.1</ version >
    </ dependency >

    
    

  • 对于Gradle项目,可以包含OpenCSV依赖项。
    compile group: 'com.opencsv', name: 'opencsv', version: '4.1'
  • 你可以下载 OpenCSV Jar 并包含在项目类路径中。

    编写CSV文件

      编写CSV文件和读取一样简单。通过将FileWriter对象作为参数传递来创建CSVWriter的实例,并开始使用CSVWriter类的方法将数据写入CSV文件。在写入数据之后,我们需要通过调用CSVWriter类的close()方法来关闭CSVWriter连接。

    1. 逐行写入数据–CSVWriter可以使用writeNext()方法逐行写入数据,其中字符串数组与每个逗号分隔的元素一起作为单独的条目传递。 代码:

      public static void writeDataLineByLine(String filePath)
      {
      // first create file object for file placed at location
      // specified by filepath
      File file = new File(filePath);
      try {
      // create FileWriter object with file as parameter
      FileWriter outputfile = new FileWriter(file);
      // create CSVWriter object filewriter object as parameter
      CSVWriter writer = new CSVWriter(outputfile);
      // adding header to csv
      String[] header = { "Name" , "Class" , "Marks" };
      writer.writeNext(header);
      // add data to csv
      String[] data1 = { "Aman" , "10" , "620" };
      writer.writeNext(data1);
      String[] data2 = { "Suraj" , "10" , "630" };
      writer.writeNext(data2);
      // closing writer connection
      writer.close();
      }
      catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      }

      
      

      输出: 后果包含以下数据的csv文件

      "Name", "Class", "Marks"
      "Aman", "10", "620"
      "Suraj", "10", "630"
      
    2. 一次写入所有数据——为了一次写入数据,请调用CSVWriter类的writeAll()方法,并传递字符串[]列表作为参数,每个字符串[]表示文件的一行。 代码:

      public static void writeDataAtOnce(String filePath)
      {
      // first create file object for file placed at location
      // specified by filepath
      File file = new File(filePath);
      try {
      // create FileWriter object with file as parameter
      FileWriter outputfile = new FileWriter(file);
      // create CSVWriter object filewriter object as parameter
      CSVWriter writer = new CSVWriter(outputfile);
      // create a List which contains String array
      List<String[]> data = new ArrayList<String[]>();
      data.add( new String[] { "Name" , "Class" , "Marks" });
      data.add( new String[] { "Aman" , "10" , "620" });
      data.add( new String[] { "Suraj" , "10" , "630" });
      writer.writeAll(data);
      // closing writer connection
      writer.close();
      }
      catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      }

      
      

      输出: 后果包含以下数据的csv文件

      "Name", "Class", "Marks"
      "Aman", "10", "620"
      "Suraj", "10", "630"
      

    使用不同的分隔符写入CSV文件
    默认情况下,CSV的分隔符将是逗号(,)。如果希望将另一个字符用作分隔符,以便将其作为参数传递给CSVWriter类。

    Syntax :
    CSVWriter(Writer writer, char separator, char quotechar,
                                  char escapechar, String lineEnd)
    Description : Constructs CSVWriter with supplied separator,
    quote char, escape char and line ending.
    

    代码:

    public static void writeDataForCustomSeparatorCSV(String filePath)
    {
    // first create file object for file placed at location
    // specified by filepath
    File file = new File(filePath);
    try {
    // create FileWriter object with file as parameter
    FileWriter outputfile = new FileWriter(file);
    // create CSVWriter with '|' as separator
    CSVWriter writer = new CSVWriter(outputfile, '|' ,
    CSVWriter.NO_QUOTE_CHARACTER,
    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
    CSVWriter.DEFAULT_LINE_END);
    // create a List which contains String array
    List<String[]> data = new ArrayList<String[]>();
    data.add( new String[] { "Name" , "Class" , "Marks" });
    data.add( new String[] { "Aman" , "10" , "620" });
    data.add( new String[] { "Suraj" , "10" , "630" });
    writer.writeAll(data);
    // closing writer connection
    writer.close();
    }
    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    
    

    输出: 后果包含以下数据的csv文件

    Name|Class|Marks
    Aman|10|620
    Suraj|10|630
    

    例子: 让我们创建一个java程序,它生成一个分号分隔的csv文件,并包含作为输入提供的数据。

    Input:
    Enter no of rows
    9
    Enter Data
    Name Class Marks
    Aman 10 543
    Amar 10 541
    Sanjeet 10 555
    Luv 10 580
    Ranjeet 10 512
    Rabi 10 540
    Dev 10 333
    Sunny 10 198
    

    代码:

    // Java program to illustrate
    // for Writing Data in CSV file
    import java.io.*;
    import java.util.*;
    import com.opencsv.CSVWriter;
    public class ResultGenerator {
    private static final String CSV_FILE_PATH
    = "./result.csv" ;
    public static void main(String[] args)
    {
    addDataToCSV(CSV_FILE_PATH);
    }
    public static void addDataToCSV(String output)
    {
    // first create file object for file placed at location
    // specified by filepath
    File file = new File(output);
    Scanner sc = new Scanner(System.in);
    try {
    // create FileWriter object with file as parameter
    FileWriter outputfile = new FileWriter(file);
    // create CSVWriter with ';' as separator
    CSVWriter writer = new CSVWriter(outputfile, ';' ,
    CSVWriter.NO_QUOTE_CHARACTER,
    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
    CSVWriter.DEFAULT_LINE_END);
    // create a List which contains Data
    List<String[]> data = new ArrayList<String[]>();
    System.out.println( "Enter no of rows" );
    int noOfRow = Integer.parseInt(sc.nextLine());
    System.out.println( "Enter Data" );
    for ( int i = 0 ; i < noOfRow; i++) {
    String row = sc.nextLine();
    String[] rowdata = row.split( " " );
    data.add(rowdata);
    }
    writer.writeAll(data);
    // closing writer connection
    writer.close();
    }
    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    
    

    输出: 后果包含以下数据的csv文件

    Name;Class;Marks
    Aman;10;543
    Amar;10;541
    Sanjeet;10;555
    Luv;10;580
    Ranjeet;10;512
    Rabi;10;540
    Dev;10;333
    Sunny;10;198
    
    

    在未来的文章中,我们将使用OpenCSV对CSV文件进行更多操作。 参考: OpenCSV文档 , CSVWriter类文档

  • © 版权声明
    THE END
    喜欢就支持一下吧
    点赞7 分享