Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在查找具有特定名称的上次修改的文件?_Java_Sorting_File Io - Fatal编程技术网

Java 正在查找具有特定名称的上次修改的文件?

Java 正在查找具有特定名称的上次修改的文件?,java,sorting,file-io,Java,Sorting,File Io,我正在尝试查找文件的最后修改版本,但当我尝试查找某个文件时,我得到了一个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) {

我正在尝试查找文件的最后修改版本,但当我尝试查找某个文件时,我得到了一个
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错误


我知道这样做是可行的,因为我已经让它工作了,但需要从头开始编写代码:(

这里是NullPointerException的来源

File choice = null;
在这里调用-->choice=file之前,需要实例化它

File choice = new File(dir);

以下是使用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;
}
公共静态路径getMostRecent(最终字符串目录,最终字符串聊天)
抛出IOException
{
最终路径dirpath=Path.get(dir.toabsolutionPath();
路径ret=null;
FileTime mostRecent=FileTime.fromMillis(0L);//1970年1月1日,00:00:00GMT
文件时电流;
final DirectoryStream.Filter Filter=新的DirectoryStream.Filter()
{
@凌驾
公共布尔接受(最终路径条目)
{
返回文件.isRegularFile(条目)
&&entry.getFileName().toString()包含(聊天);
}
};
for(最终路径条目:Files.newDirectoryStream(dirpath,filter)){
当前=文件。getLastModifiedTime(条目);
如果(当前比较(最大百分比)>0){
mostRecent=当前;
ret=输入;
}
}
返回条目;
}
如果您使用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);
    }
}
公共静态路径getMostRecent(最终字符串目录,最终字符串聊天)
抛出IOException
{
最终路径dirpath=Path.get(dir.toabsolutionPath();
试一试(
最终流条目=Files.list(dirpath);
) {
返回条目.filter(文件::isRegularFile)
.filter(条目->条目.getFileName().toString().contains(聊天))
.sorted(Comparator.comparing(Files::getLastModifiedTime).reversed())
.findFirst().orElse(null);
}
}

什么是NullPointerException?这就是它给我的全部..是的,
NullPointerException
在哪里被调用?你能给出堆栈跟踪吗?@ElliottFrisch我真的不相信这个问题与你所指的是重复的,我怀疑
聊天
null
。这会引发NPE。还有另一个可能的问题PE:
.listFiles()
我不同意,因为用户说除非他在下面的循环中进行了更改,否则它是有效的,因此错误必须在循环中。但是,这可能是NPE。请尝试并
.listFiles()
在一个您无法读取条目的目录上;或者从一个非目录的
文件上……有很多其他方法可以改进此基本代码,但在尝试抛出一个通用方法之前,解决此代码中的问题很重要。我知道您希望您的答案突出,但我的目标是clarit是的,正是用户需要的地方。谢谢。这并不是我想让我的答案脱颖而出。但在2015年使用
File
是一种挑战。不幸的是,Android用户没有选择,但OP使用的是Java 7+。