我正在尝试找到文件的最后修改版本,我有这个工作但是当我尝试找到某个文件时,我得到了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)”out 时,代码可以正常工作。否则,它会给我NullPointerException错误。
我知道这样的事情有效,因为我有它工作但需要从头开始使用我的代码:(
答案 0 :(得分:0)
这是NullPointerException的来源。
File choice = null;
在此处调用之前,您需要实例化它 - > choice = file;
File choice = new File(dir);
答案 1 :(得分:0)
这是使用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);
}
}