java - 按上次编辑时间读取文件夹内的所有 .txt 文件

标签 java file

我这里有一个代码可以读取1个文件夹中的所有.txt文件,它可以将.txt文件中的所有内容打印到控制台。然后它移动到新文件夹。

问题是:它是随机读取的,但我想通过时间戳读取.txt文件,即首先读取最后一次编辑的时间...

import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Basic {

    public static void main(String[] args) throws IOException {
        String source = "C:\\Users\\NN\\Documents\\Test1";
        String target = "C:\\Users\\NN\\Documents\\Test2";

        List<Path> filePaths = filePathsList(source); // Step 1: get all files from a directory
        List<Path> filteredFilePaths = filter(filePaths); // Step 2: filter by ".txt"
        Map<Path, List<String>> contentOfFiles = getContentOfFiles(filteredFilePaths); // Step 3: get content of files
        move(filteredFilePaths, target); // Step 4: move files to destination
        printToConsole(contentOfFiles); // Step 5: print content of files to console
    }

    public static List<Path> filePathsList(String directory) throws IOException {
        List<Path> filePaths = new ArrayList<>();
        DirectoryStream<Path> directoryStream = Files.newDirectoryStream(FileSystems.getDefault().getPath(directory));
        for (Path path : directoryStream) {
            filePaths.add(path);
        }
        return filePaths;
    }

    private static List<Path> filter(List<Path> filePaths) {
        List<Path> filteredFilePaths = new ArrayList<>();
        for (Path filePath : filePaths) {
            if (filePath.getFileName().toString().endsWith(".txt")) {
                filteredFilePaths.add(filePath);
            }
        }
        return filteredFilePaths;
    }

    private static Map<Path, List<String>> getContentOfFiles(List<Path> filePaths) throws IOException {
        Map<Path, List<String>> contentOfFiles = new HashMap<>();
        for (Path filePath : filePaths) {
            contentOfFiles.put(filePath, new ArrayList<>());
            Files.readAllLines(filePath).forEach(contentOfFiles.get(filePath)::add);
        }
        return contentOfFiles;
    }

    private static void move(List<Path> filePaths, String target) throws IOException {
        Path targetDir = FileSystems.getDefault().getPath(target);
        if (!Files.isDirectory(targetDir)) {
            targetDir = Files.createDirectories(Paths.get(target));
        }
        for (Path filePath : filePaths) {
            System.out.println("Moving " + filePath.getFileName() + " to " + targetDir.toAbsolutePath());
            Files.move(filePath, Paths.get(target, filePath.getFileName().toString()), StandardCopyOption.ATOMIC_MOVE);
        }   
    }

    private static void printToConsole(Map<Path, List<String>> contentOfFiles) {
        System.out.println("Content of files:");
        contentOfFiles.forEach((k,v) -> v.forEach(System.out::println));
    }
}

最佳答案

您可以使用File.lastModified()并按日期对其进行排序。

关于java - 按上次编辑时间读取文件夹内的所有 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42756063/

相关文章:

java - Spring security Oauth 2 在/oauth/token上重定向行为

java - 从字符串中提取单词的正则表达式

java - 如何访问正在运行的 jar 上方的文件夹

file - N :1 file descriptors?

java - 安卓 : How to synchronized resource in right way

java - 链表时间遍历中的迭代器

java - 寻求设计负载测试的帮助

java - 如何将下面的 xsd 文件转换为 java 文件?

android - 使用 Uri 从 SD 卡获取文件

java - Grails/Groovy 文件删除