繁体   English   中英

Java - 我怎么说我不关心这部分字符串包含什么?

[英]Java - How do I say I don't care what this part of the string contains?

我有一些代码,我得到了时间戳,但是我希望能够说我不关心它的秒数,所以...这是我的代码:

    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以来存在更好的替代方案。

而是使用PathFiles 它们有许多方法可以让您执行常见任务,此外还有更好的错误报告。

在这种特殊情况下,您可以使用DirectoryStream ,它来自同一个类系列( java.nio.file )。 DirectoryStream是目录中文件的可迭代对象。 Files类允许您获取目录中与glob模式匹配的所有文件的DirectoryStream Glob模式是熟悉的模式,如*.javaName-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 );
    }
}

当然,有任何例外的try-catch。

您可以使用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"));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM