简介
在这个实验中,你将学习如何使用 Java 把数据写入 CSV(逗号分隔值)文件。CSV 文件是存储表格数据的常用格式,广泛用于不同应用程序之间的数据交换。
你将使用 OpenCSV 库,它提供了在 Java 中读写 CSV 文件的简单方法。在这个实验结束时,你将创建一个 Java 程序,该程序可以将数据写入新的 CSV 文件,并将额外的数据追加到现有文件中。
在这个实验中,你将学习如何使用 Java 把数据写入 CSV(逗号分隔值)文件。CSV 文件是存储表格数据的常用格式,广泛用于不同应用程序之间的数据交换。
你将使用 OpenCSV 库,它提供了在 Java 中读写 CSV 文件的简单方法。在这个实验结束时,你将创建一个 Java 程序,该程序可以将数据写入新的 CSV 文件,并将额外的数据追加到现有文件中。
CSV(逗号分隔值)是一种用于存储表格数据的简单文件格式。CSV 文件中的每一行代表一行数据,行内的值用逗号分隔。例如,一个包含学生数据的 CSV 文件可能如下所示:
Name,Age,Email
John Doe,25,[email protected]
Jane Smith,22,[email protected]
让我们从创建一个简单的 Maven 项目开始来处理 CSV 文件。Maven 是一个构建自动化工具,它将帮助我们管理项目的依赖项。
cd ~/project/csv-writer
pom.xml
的新文件。这个文件将定义我们的项目结构和依赖项:touch pom.xml
pom.xml
文件,并添加以下内容:<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>csv-writer</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
</dependencies>
</project>
这个 XML 文件定义了我们的项目,并将 OpenCSV 库(版本 5.4)作为依赖项添加。OpenCSV 提供了用于读写 CSV 文件的简单类。
mkdir -p src/main/java/com/example
这个命令为 Java 源代码创建了标准的 Maven 目录结构。
现在我们已经使用 OpenCSV 依赖项搭建好了项目,接下来可以创建一个将数据写入 CSV 文件的 Java 程序。
CSVWriterExample.java
的新 Java 类文件:touch src/main/java/com/example/CSVWriterExample.java
CSVWriterExample.java
并添加以下代码:package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVWriterExample {
public static void main(String[] args) {
try {
// Create a new CSVWriter instance
// The first parameter is a FileWriter with the file path
// The second parameter is the separator character (default is comma)
// The third parameter is the quote character (default is double quote)
// The fourth parameter is the escape character (default is backslash)
// The fifth parameter is the line ending (default is newline)
CSVWriter writer = new CSVWriter(new FileWriter("students.csv"),
CSVWriter.DEFAULT_SEPARATOR,
CSVWriter.DEFAULT_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
// Write header line
String[] header = {"Name", "Age", "Email"};
writer.writeNext(header);
// Write data lines
String[] student1 = {"John Doe", "25", "[email protected]"};
writer.writeNext(student1);
String[] student2 = {"Jane Smith", "22", "[email protected]"};
writer.writeNext(student2);
// Close the writer to flush and release resources
writer.close();
System.out.println("CSV file created successfully!");
} catch (IOException e) {
System.out.println("Error writing to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
这段代码实现了以下功能:
CSVWriter
对象,该对象将数据写入名为 students.csv
的文件CSVWriter
构造函数有五个参数:
FileWriter
:指定要写入的文件cd ~/project/csv-writer
mvn compile
此命令使用 Maven 构建系统编译我们的 Java 源代码。
让我们运行 Java 程序来创建 CSV 文件并查看结果。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVWriterExample"
如果你看到关于 exec-maven-plugin
的错误消息,我们需要将其添加到 pom.xml
中:
pom.xml
并更新它,以包含 exec-maven-plugin
:<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>csv-writer</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.example.CSVWriterExample</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
mvn exec:java
你应该会在终端输出中看到消息“CSV file created successfully!”。
cat students.csv
输出应该显示 CSV 文件的内容,大致如下:
"Name","Age","Email"
"John Doe","25","[email protected]"
"Jane Smith","22","[email protected]"
注意,输出中每个字段周围都包含引号。这是 OpenCSV 的默认行为,有助于处理包含逗号等特殊字符的字段。
既然我们已经创建了一个 CSV 文件,接下来让我们修改 Java 程序,以便向现有文件追加额外的数据,而不是覆盖它。
CSVAppendExample.java
的新 Java 文件:touch src/main/java/com/example/CSVAppendExample.java
CSVAppendExample.java
并添加以下代码:package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVAppendExample {
public static void main(String[] args) {
try {
// Create a CSVWriter in append mode by setting the second parameter of FileWriter to true
CSVWriter writer = new CSVWriter(new FileWriter("students.csv", true));
// Write additional data to the existing file
String[] student3 = {"Robert Johnson", "24", "[email protected]"};
writer.writeNext(student3);
String[] student4 = {"Maria Garcia", "23", "[email protected]"};
writer.writeNext(student4);
// Close the writer
writer.close();
System.out.println("Data appended to CSV file successfully!");
} catch (IOException e) {
System.out.println("Error appending to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
这段代码与我们之前的示例类似,但有两个重要的区别:
FileWriter
时将第二个参数设置为 true
,这会使其处于追加模式cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVAppendExample"
cat students.csv
你应该会看到原始数据加上新追加的记录:
"Name","Age","Email"
"John Doe","25","[email protected]"
"Jane Smith","22","[email protected]"
"Robert Johnson","24","[email protected]"
"Maria Garcia","23","[email protected]"
如你所见,新数据被添加到了文件末尾,而没有影响到现有内容。
touch src/main/java/com/example/CSVCustomExample.java
CSVCustomExample.java
并添加以下代码:package com.example;
import com.opencsv.CSVWriter;
import java.io.FileWriter;
import java.io.IOException;
public class CSVCustomExample {
public static void main(String[] args) {
try {
// Create a CSVWriter with semicolon as separator instead of comma
CSVWriter writer = new CSVWriter(new FileWriter("students_semicolon.csv"),
';',
CSVWriter.DEFAULT_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
// Write header line
String[] header = {"Name", "Age", "Email"};
writer.writeNext(header);
// Write data lines
String[] student1 = {"John Doe", "25", "[email protected]"};
writer.writeNext(student1);
String[] student2 = {"Jane Smith", "22", "[email protected]"};
writer.writeNext(student2);
// Close the writer
writer.close();
System.out.println("CSV file with semicolon separator created successfully!");
} catch (IOException e) {
System.out.println("Error writing to CSV file: " + e.getMessage());
e.printStackTrace();
}
}
}
这个示例创建了一个使用分号作为分隔符而非逗号的 CSV 文件,在一些欧洲国家,逗号被用作小数点分隔符,因此使用分号作为 CSV 文件的分隔符很常见。
cd ~/project/csv-writer
mvn exec:java -Dexec.mainClass="com.example.CSVCustomExample"
cat students_semicolon.csv
你应该会看到使用分号作为分隔符的 CSV 文件:
"Name";"Age";"Email"
"John Doe";"25";"[email protected]"
"Jane Smith";"22";"[email protected]"
在这个实验中,你学习了如何使用 Java 和 OpenCSV 库将数据写入 CSV 文件。你成功地完成了以下操作:
这些技能在许多应用场景中都很有用,例如数据导出、报告生成以及系统间的数据交换。由于 CSV 格式简单,并且与电子表格软件和数据分析工具兼容,因此被广泛使用。
一些关键要点如下:
CSVWriter
类为在 Java 中写入 CSV 文件提供了一种简单的方法new FileWriter(filename)
与 CSVWriter
配合使用new FileWriter(filename, true)
与 CSVWriter
配合使用writer.close()
关闭写入器,以确保所有数据都被写入文件掌握了这些基础知识后,你应该能够将 CSV 写入功能集成到你的 Java 应用程序中。