查找最后一个修改过的具有特定名称的文件?

tkclm6bt  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(269)

我试图找到一个文件的最后修改版本,我有这个工作,但当我试图找到一个特定的文件,我得到一个 NULLPointerException . 我的代码:

public static File getFile(String dir, String chat) {

    File fl = new File(dir);
    File[] files = fl.listFiles(new FileFilter() {          
        public boolean accept(File file) {
            return file.isFile();
        }
    });
    long lastMod = Long.MIN_VALUE;
    File choice = null;
    for (File file : files) {
        if (file.lastModified() > lastMod && file.getName().contains(chat)) {
            choice = file;
            lastMod = file.lastModified();
        }
    }
    return choice;
}

当您取出“&&file.getname().contains(chat)”时,代码就会工作。否则,它给了我nullpointerexception错误。
我知道像这样的东西可以工作,因为我让它工作,但需要从零开始用我的代码:(

uoifb46i

uoifb46i1#

这里是nullpointerexception的来源。

File choice = null;

在这里调用它之前需要示例化-->choice=file;

File choice = new File(dir);
8iwquhpp

8iwquhpp2#

以下是使用java.nio.file的版本:

public static Path getMostRecent(final String dir, final String chat)
    throws IOException
{
    final Path dirpath = Paths.get(dir).toAbsolutePath();
    Path ret = null;
    FileTime mostRecent = FileTime.fromMillis(0L); // Jan 1st 1970, 00:00:00 GMT
    FileTime current;

    final DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<>()
    {
        @Override
        public boolean accept(final Path entry)
        {
            return Files.isRegularFile(entry)
                && entry.getFileName().toString().contains(chat);
        }
    };

    for (final Path entry: Files.newDirectoryStream(dirpath, filter)) {
        current = Files.getLastModifiedTime(entry);
        if (current.compareTo(mostRecent) > 0) {
            mostRecent = current;
            ret = entry;
        }
    }

    return entry;
}

如果使用java 8:

public static Path getMostRecent(final String dir, final String chat)
    throws IOException
{
    final Path dirpath = Paths.get(dir).toAbsolutePath();
    try (
        final Stream<Path> entries = Files.list(dirpath);
    ) {
        return entries.filter(Files::isRegularFile)
            .filter(entry -> entry.getFileName().toString().contains(chat))
            .sorted(Comparator.comparing(Files::getLastModifiedTime).reversed())
            .findFirst().orElse(null);
    }
}

相关问题