在Java中,你可以使用多线程概念将多个CSV文件合并为一个文件
Runnable
接口的类,用于读取CSV文件并将内容追加到目标文件。import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class CsvFileReader implements Runnable {
private String inputFilePath;
private String outputFilePath;
public CsvFileReader(String inputFilePath, String outputFilePath) {
this.inputFilePath = inputFilePath;
this.outputFilePath = outputFilePath;
}
@Override
public void run() {
try {
List<String> lines = Files.readAllLines(Paths.get(inputFilePath));
synchronized (CsvFileMerger.class) {
Files.write(Paths.get(outputFilePath), lines, StandardOpenOption.APPEND);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
CsvFileMerger
类,用于创建并启动线程。import java.util.ArrayList;
import java.util.List;
public class CsvFileMerger {
public static void main(String[] args) {
String[] inputFiles = {"file1.csv", "file2.csv", "file3.csv"};
String outputFile = "merged_output.csv";
List<Thread> threads = new ArrayList<>();
for (String inputFile : inputFiles) {
Thread thread = new Thread(new CsvFileReader(inputFile, outputFile));
threads.add(thread);
thread.start();
}
for (Thread thread : threads) {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("CSV files have been merged.");
}
}
这个示例中,我们创建了一个CsvFileReader
类,它实现了Runnable
接口。在run()
方法中,我们读取输入文件的内容并将其追加到输出文件。
然后,在CsvFileMerger
类的main()
方法中,我们为每个输入文件创建一个线程,并将它们添加到一个线程列表中。接着,我们启动所有线程,并使用join()
方法等待它们完成。
注意:这个示例使用了synchronized
关键字来确保在追加内容到输出文件时不会发生并发问题。在实际应用中,你可能需要根据你的需求对代码进行调整。
此外,如果CSV文件非常大,一次性读取所有行可能会导致内存不足。在这种情况下,你可以考虑使用BufferedReader
逐行读取文件。
领取专属 10元无门槛券
手把手带您无忧上云