我有一段代码,在那里我得到时间戳,但我想能够说,我不在乎它是几秒,所以…这是我的代码:
String timeStampString = new SimpleDateFormat("yyyyMMddHHmm").format(Calendar.getInstance().getTime());
File fileName = new File(universal + "/Downloads/" + timeStampString);
String newName = "allPi.csv";
if (fileName.exists()) {
fileName.renameTo(new File(universal + "/Downloads/allPi.csv"));
}
else
{
Assert.fail();
}
下载的文件将有一个完整的时间戳到秒,我怎么说我不关心什么数字在秒部分,像timeStampString + "**";还是什么? ?
我尝试了一些随机的东西,如:
File fileName = new File(universal + "/Downloads/" + timeStampString + "[.+]");
有人能帮忙吗?
首先,不要使用File
类。它是一个过时的、写得很糟糕的类,不应该在新代码中使用,因为自Java 1.4左右以来已经存在更好的替代品。
改为使用Path
和Files
。它们有许多方法允许您执行常见任务,此外还有更好的错误报告。
在这种特殊情况下,您可以使用DirectoryStream
,它来自同一个类族(java.nio.file
)。DirectoryStream
是目录中文件的可迭代对象。Files
类允许您获得目录中与glob模式匹配的所有文件的DirectoryStream
。Glob模式是我们熟悉的模式,如*.java
或Name-xyz-?.txt
。
在您的例子中,您假设只有一个条目。因此,只需要关联迭代器中的第一个条目。
Path dir = Paths.get( universal, "Downloads" );
Path renameTo = Paths.get( universal, "Downloads", "allPi.txt" );
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, timeStampString + "*" )) {
Iterator<Path> iterator = stream.iterator();
if ( iterator.hasNext() ) {
Path path = iterator.next();
Files.move( path, renameTo, StandardCopyOption.REPLACE_EXISTING );
}
}
您可以使用java.nio.file
API:
Path directory = Paths.get(universal, "Downloads");
Path path = Files.list(directory).filter((Path p) -> {
String fileName = p.getFileName().toString();
return fileName.startsWith(timeStampString);
})
.findAny()
.orElse(null);
if (path == null) {
Assert.fail();
} else {
Files.move(path, directory.resolve("allPi.csv"));
}