获取某路径下所有txt文件(包括子文件夹下),并把txt文件最后修改时间为一周之内的txt内容,合并到一个txt文件中。编写java代码
时间: 2023-03-14 17:24:08 浏览: 83
可以使用Java NIO类库中的Files.walk方法来遍历某路径下的所有txt文件,再使用Files.getLastModifiedTime()方法获取每个txt文件最后修改时间,比较是否为一周之内,如果是则读取文件内容,合并到一个txt文件中即可。
相关问题
java获取该路径下所有 Excel 文件(含子文件夹下),并把 Excel 文件最后修改时间为:一 周之内的 Excel 内容,合并到 mzy-merge.xlsx 文件中。 ② mzy-merge.xlsx 文件中,每个被合并文件内容最前部插入:该文件绝对路
径和最后修改时间。以下是 Java 代码实现:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class MergeExcelFiles {
private static final String MERGE_FILE_NAME = "mzy-merge.xlsx";
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
try {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("merged data");
// Create header row
Row headerRow = sheet.createRow(0);
Cell cell1 = headerRow.createCell(0);
cell1.setCellValue("File Path");
Cell cell2 = headerRow.createCell(1);
cell2.setCellValue("Last Modified");
Cell cell3 = headerRow.createCell(2);
cell3.setCellValue("Data");
// Get all Excel files in the given directory and its subdirectories
File directory = new File("C:\\path\\to\\directory");
File[] allFiles = directory.listFiles((dir, name) -> name.toLowerCase().endsWith(".xlsx"));
int rowCount = 1;
for (File file : allFiles) {
// Check if file was modified within the last week
BasicFileAttributes attributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
Calendar lastWeek = Calendar.getInstance();
lastWeek.add(Calendar.DATE, -7);
if (attributes.lastModifiedTime().toMillis() < lastWeek.getTimeInMillis()) {
continue;
}
// Open Excel file and read data
FileInputStream inputStream = new FileInputStream(file);
Workbook inputWorkbook = new XSSFWorkbook(inputStream);
Sheet inputSheet = inputWorkbook.getSheetAt(0);
int rows = inputSheet.getPhysicalNumberOfRows();
for (int i = 0; i < rows; i++) {
Row inputRow = inputSheet.getRow(i);
if (inputRow != null) {
Row outputRow = sheet.createRow(rowCount);
// Insert file path and last modified time
Cell filePathCell = outputRow.createCell(0);
filePathCell.setCellValue(file.getAbsolutePath());
Cell lastModifiedCell = outputRow.createCell(1, CellType.STRING);
lastModifiedCell.setCellValue(DATE_FORMAT.format(new Date(attributes.lastModifiedTime().toMillis())));
// Copy cell contents to output row
int cells = inputRow.getPhysicalNumberOfCells();
for (int j = 0; j < cells; j++) {
Cell inputCell = inputRow.getCell(j);
if (inputCell != null) {
Cell outputCell = outputRow.createCell(j + 2);
outputCell.setCellValue(inputCell.getStringCellValue());
}
}
rowCount++;
}
}
inputWorkbook.close();
inputStream.close();
}
// Save merged data to file
FileOutputStream outputStream = new FileOutputStream(MERGE_FILE_NAME);
workbook.write(outputStream);
workbook.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这个代码可以获取指定目录下所有扩展名为 ".xlsx" 的 Excel 文件,然后筛选出最后修改时间为一周内的文件。接着,读取每个文件的内容,并将文件的绝对路径和最后修改时间插入到每个行的前两列中。最后,将所有数据合并到一个新的 Excel 文件中。注意,在运行代码之前需要添加 Apache POI 依赖。
java Easyexcel 获取该路径下所有 Excel 文件(含子文件夹下),并把 Excel 文件最后修改时间为:一 周之内的 Excel 内容,合并到 mzy-merge.xlsx 文件中。 ② mzy-merge.xlsx 文件中,每个被合并文件内容最前部插入:该文件绝对路
径,并在每个文件内容之间插入一个空行。
以下是 Java 代码实现:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
public class ExcelMerge {
// 定义要遍历的文件夹路径
private static final String FOLDER_PATH = "C:/excel/";
// 定义要合并到的文件名
private static final String MERGE_FILE_NAME = "mzy-merge.xlsx";
// 定义每个被合并文件内容最前部插入的内容
private static final String FILE_PATH_PREFIX = "文件路径:";
public static void main(String[] args) {
// 获取一周前的日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE, -7);
Date oneWeekAgo = calendar.getTime();
// 获取所有 Excel 文件
List<File> excelFiles = getAllExcelFiles(new File(FOLDER_PATH));
// 遍历 Excel 文件,将一周内修改的文件内容合并到 mzy-merge.xlsx 文件中
ExcelWriter excelWriter = null;
try {
excelWriter = EasyExcel.write(MERGE_FILE_NAME).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
for (File excelFile : excelFiles) {
if (excelFile.lastModified() < oneWeekAgo.getTime()) {
continue;
}
System.out.println("正在合并文件:" + excelFile.getAbsolutePath());
List<List<String>> data = EasyExcel.read(new FileInputStream(excelFile)).sheet().doReadSync();
for (int i = 0; i < data.size(); i++) {
data.get(i).add(0, FILE_PATH_PREFIX + excelFile.getAbsolutePath());
}
if (!data.isEmpty()) {
data.add(0, new ArrayList<>());
}
WriteTable writeTable = EasyExcel.writerTable().needHead(false).build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
FillWrapper fillWrapper = FillWrapper.builder().excelFile(excelFile.getAbsolutePath()).sheetNo(0).build();
excelWriter.fill(data, fillConfig, writeSheet, writeTable, fillWrapper);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
/**
* 获取指定文件夹下所有 Excel 文件(含子文件夹)
*
* @param folder 文件夹
* @return Excel 文件列表
*/
private static List<File> getAllExcelFiles(File folder) {
List<File> excelFiles = new ArrayList<>();
if (folder.isDirectory()) {
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
excelFiles.addAll(getAllExcelFiles(file));
} else if (file.isFile() && file.getName().endsWith(".xlsx")) {
excelFiles.add(file);
}
}
}
}
return excelFiles;
}
}
```
这段代码使用了 EasyExcel 库来读写 Excel 文件,具体实现步骤如下:
1. 获取一周前的日期;
2. 遍历指定文件夹下所有 Excel 文件,并筛选出最后修改时间在一周内的文件;
3. 读取每个符合条件的 Excel 文件内容,并在最前部插入文件路径信息和一个空行;
4. 将每个 Excel 文件内容填充到 mzy-merge.xlsx 文件中的对应位置。
阅读全文