用Java把两个文件夹下的同名log按日期顺序整合成一个新的txt文档,每个log里大概7万条数据
该回答引用ChatGPT
要实现将两个文件夹下的同名log按日期顺序整合成一个新的txt文档的功能,您可以按照以下步骤操作:
1、获取两个文件夹下的log文件列表:使用Java的File类和listFiles()方法获取两个文件夹下的log文件列表。您可以使用FileFilter来筛选出.log文件。
2、按日期排序:对于每个文件夹下的log文件列表,您可以使用Collections.sort()方法按照文件名的日期排序。您可以使用正则表达式来提取文件名中的日期信息,并将文件名转换为Date类型进行排序。
逐个读取log文件并写入新的txt文档:对于排序后的log文件列表,逐个读取每个log文件,并将其写入新的txt文档中。您可以使用Java的BufferedReader和BufferedWriter类来实现文件读写操作。
下面是一个实现上述功能的Java代码示例:
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class MergeLogFiles {
public static void main(String[] args) throws Exception {
// 定义两个log文件夹的路径
String folderPath1 = "D:/logs1";
String folderPath2 = "D:/logs2";
// 定义新的txt文档路径
String outputPath = "D:/merged_logs.txt";
// 获取两个文件夹下的log文件列表
List<File> fileList = new ArrayList<>();
fileList.addAll(getLogFiles(folderPath1));
fileList.addAll(getLogFiles(folderPath2));
// 按日期排序
Collections.sort(fileList, (f1, f2) -> {
Date date1 = getLogDate(f1.getName());
Date date2 = getLogDate(f2.getName());
return date1.compareTo(date2);
});
// 逐个读取log文件并写入新的txt文档
BufferedWriter writer = new BufferedWriter(new FileWriter(outputPath));
for (File file : fileList) {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
reader.close();
}
writer.close();
}
// 获取指定文件夹下的log文件列表
private static List<File> getLogFiles(String folderPath) {
List<File> fileList = new ArrayList<>();
File folder = new File(folderPath);
if (folder.exists() && folder.isDirectory()) {
File[] files = folder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".log");
}
});
if (files != null) {
for (File file : files) {
fileList.add(file);
}
}
}
return fileList;
}
// 从log文件名中提取日期信息
private static Date getLogDate(String fileName) throws Exception {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
int start = fileName.indexOf("log-") + 4;
int end = fileName.indexOf(".log");
String dateString = fileName.substring(start, end);
return dateFormat.parse(dateString);
}
}
以下是Java代码,用于将两个文件夹下同名log文件按照日期顺序整合到一个新的txt文件中:
import java.io.*;
import java.text.*;
import java.util.*;
public class MergeLogs {
public static void main(String[] args) throws Exception {
// 输入源文件夹路径和目标文件路径
String sourceFolder1 = "path/to/source/folder1";
String sourceFolder2 = "path/to/source/folder2";
String destinationFile = "path/to/destination/file.txt";
// 获取源文件夹1中所有的log文件
File folder1 = new File(sourceFolder1);
File[] listOfFiles1 = folder1.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".log");
}
});
// 获取源文件夹2中所有的log文件
File folder2 = new File(sourceFolder2);
File[] listOfFiles2 = folder2.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".log");
}
});
// 将两个文件夹中所有的log文件放在一个数组中
File[] listOfFiles = new File[listOfFiles1.length + listOfFiles2.length];
System.arraycopy(listOfFiles1, 0, listOfFiles, 0, listOfFiles1.length);
System.arraycopy(listOfFiles2, 0, listOfFiles, listOfFiles1.length, listOfFiles2.length);
// 对log文件按日期进行排序
Arrays.sort(listOfFiles, new Comparator<File>() {
public int compare(File f1, File f2) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
try {
Date d1 = sdf.parse(f1.getName().substring(0, 8));
Date d2 = sdf.parse(f2.getName().substring(0, 8));
return d1.compareTo(d2);
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
});
// 将log文件中的内容拼接到目标文件中
BufferedWriter bw = new BufferedWriter(new FileWriter(destinationFile));
for (File file : listOfFiles) {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
br.close();
}
bw.close();
System.out.println("Logs merged successfully!");
}
}
代码中,首先需要输入源文件夹1、源文件夹2和目标文件路径。然后通过File类和FilenameFilter接口获取源文件夹1和源文件夹2中的所有log文件,并将它们放在一个数组中。接着使用Arrays.sort方法和Comparator接口按照日期对log文件进行排序。最后,使用BufferedWriter类将log文件中的内容拼接到目标文件中,并关闭文件流。完成后输出提示信息"Logs merged successfully!"。
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>