如何使用Java获取某文件夹下包含某字符的文件列表且文件按时间排序

有这样一个需求:使用Java语言实现获取某个文件夹下文件名称包含"CDDY"的文件,并按照修改时间升序排列。你可以使用java.nio.file包中的类。以下是一个简单的示例代码,演示如何实现这一功能:

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.FileTime;
import java.util.*;

public class FileSearchWithCDDY {

    public static void main(String[] args) {
        Path directory = Paths.get("C:/path/to/your/directory"); // 替换为你的目录路径
        List<Path> filesWithCDDY = getFilesWithCDDY(directory);

        // 按修改时间升序排序
        Collections.sort(filesWithCDDY, Comparator.comparing(path -> {
            try {
                return Files.getLastModifiedTime(path);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }));

        // 打印结果
        for (Path file : filesWithCDDY) {
            System.out.println(file);
        }
    }

    private static List<Path> getFilesWithCDDY(Path directory) {
        List<Path> filesWithCDDY = new ArrayList<>();
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory, path -> {
            String fileName = path.getFileName().toString();
            return Files.isRegularFile(path) && fileName.contains("CDDY");
        })) {
            for (Path file : stream) {
                filesWithCDDY.add(file);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return filesWithCDDY;
    }
}

在上面的代码中,getFilesWithCDDY方法使用Files.newDirectoryStream来遍历指定目录下的所有文件,并通过Lambda表达式过滤出文件名包含"CDDY"的文件。然后,Collections.sort方法使用Comparator来比较文件的最后修改时间,并按升序排序这些文件。最后,遍历并打印排序后的文件列表。

请确保将"C:/path/to/your/directory"替换为你想要搜索的实际目录路径。如果目录路径或文件名包含特殊字符或空格,确保在路径字符串中使用正确的转义序列。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用 EasyExcel 实现的 function2 方法: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.metadata.BaseRowModel; import com.alibaba.excel.metadata.Sheet; import org.apache.commons.io.FileUtils; import java.io.File; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.List; public class ExcelUtil { /** * 合并指定路径下一周之内的 Excel 文件到 mzy-merge.xlsx 中,并在每个被合并文件内容最前部插入该文件绝对路径,且背景色为黄色,字体为红色。 * * @param dirPath 指定路径 * @return mzy-merge.xlsx 文件的绝对路径字符串 */ public static String function2(String dirPath) { // 一周之内的时间戳 long weekAgo = System.currentTimeMillis() - 7 * 24 * 60 * 60 * 1000L; // 获取所有 Excel 文件 List<File> allFiles = new ArrayList<>(); File rootDir = new File(dirPath); getAllExcelFiles(rootDir, allFiles); // 筛选一周之内的 Excel 文件 List<File> recentFiles = new ArrayList<>(); for (File file : allFiles) { if (file.lastModified() > weekAgo) { recentFiles.add(file); } } // 按照修改时间排序 recentFiles.sort(Comparator.comparingLong(File::lastModified)); // 读取数据 List<ExcelData> dataList = new ArrayList<>(); for (File file : recentFiles) { List<Object> readList = EasyExcel.read(file).sheet().headRowNumber(0).doReadSync(); for (Object obj : readList) { ExcelData data = new ExcelData(); data.setFilePath(file.getAbsolutePath()); data.setRowData(obj.toString()); dataList.add(data); } } // 写入数据 String mergeFilePath = rootDir.getAbsolutePath() + File.separator + "mzy-merge.xlsx"; Sheet sheet = new Sheet(1, 0, ExcelData.class); sheet.setSheetName("merged"); EasyExcel.write(mergeFilePath).sheet().doWrite(dataList, sheet); // 设置样式 ExcelStyleListener listener = new ExcelStyleListener(); EasyExcel.read(mergeFilePath, ExcelData.class, listener).sheet().doReadSync(); listener.setStyle(); return mergeFilePath; } /** * 递归获取指定目录下的所有 Excel 文件 * * @param dir 指定目录 * @param fileList Excel 文件列表 */ private static void getAllExcelFiles(File dir, List<File> fileList) { if (!dir.isDirectory()) { return; } for (File file : dir.listFiles()) { if (file.isFile() && file.getName().endsWith(".xlsx")) { fileList.add(file); } else if (file.isDirectory()) { getAllExcelFiles(file, fileList); } } } /** * Excel 数据类 */ private static class ExcelData extends BaseRowModel { @ExcelProperty(value = "文件路径", index = 0) private String filePath; @ExcelProperty(value = "数据", index = 1) private String rowData; public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public String getRowData() { return rowData; } public void setRowData(String rowData) { this.rowData = rowData; } } /** * Excel 样式监听器 */ private static class ExcelStyleListener extends ExcelListener<ExcelData> { @Override public void invokeHeadMap(int rowNum, java.util.Map<Integer, String> headMap, Sheet sheet) { headMap.put(0, "文件路径"); headMap.put(1, "数据"); } /** * 设置样式 */ public void setStyle() { for (int i = 1; i <= dataList.size(); i++) { ExcelData data = dataList.get(i - 1); sheetWriter.fillBackgroundForegroundColor(i, 0, i, 0, IndexedColors.YELLOW.getIndex()); sheetWriter.fillFontColor(i, 0, i, 0, IndexedColors.RED.getIndex()); } } } } ``` 注意,以上代码中还用到了一个 ExcelListener 类,这个类是 EasyExcel 的一个监听器,用来在 Excel 读取的过程中获取数据。以下是 ExcelListener 的实现: ```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.ArrayList; import java.util.List; /** * Excel 监听器 * * @param <T> 数据类型 */ public abstract class ExcelListener<T> extends AnalysisEventListener<T> { protected Sheet sheet; protected List<T> dataList = new ArrayList<>(); protected SheetWriter sheetWriter; @Override public void invoke(T data, AnalysisContext context) { dataList.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { sheet = context.getCurrentSheet(); sheetWriter = context.getOrCreateNewSheetWriter(); } } ``` 在以上代码中,我们使用 EasyExcel 读取 Excel 文件,并将每个文件的数据转化为一个 ExcelData 对象,然后将所有 ExcelData 对象写入到 mzy-merge.xlsx 文件中。在写入数据之后,我们使用一个 ExcelStyleListener 来设置样式,使每个被合并文件内容最前部插入该文件绝对路径,且背景色为黄色,字体为红色。最终,我们返回 mzy-merge.xlsx 文件的绝对路径字符串。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值