【问题标题】:Get Java files in Directory and all Subdirectories [duplicate]获取目录和所有子目录中的 Java 文件 [重复]
【发布时间】:2020-08-29 22:00:55
【问题描述】:

我正在尝试将所有 .java-files 放入 directory(已给出)及其所有子目录中。这就是我想出的:

public static void getJavaFiles(Path path) {


    DirectoryStream<Path> stream = null;
    try {

        stream = Files.newDirectoryStream(path);
        for (Path entry : stream) {
            if (Files.isRegularFile(entry)) {
                if(entry.getFileName().toString() == "*.java") {
                    System.out.println(entry.getFileName().toString());
                };

            } else if (Files.isDirectory(entry)) {
                getJavaFiles(entry);
            }

        }



    } catch (IOException e) {

        throw new RuntimeException(String.format("error reading folder %s: %s", path, e.getMessage()), e);

    } finally {
        if(stream != null) {
            try {
                stream.close();
            } catch (IOException e) {

            }
        }
    }   

}

不幸的是,entry.getFileName().toString() == "*.java" 并没有像我想象的那样工作。我得到了所有文件,但我如何只得到 .java 文件?

【问题讨论】:

  • 你必须使用.matches(.*\\.java")。该比较有两个问题 - 第一个是您使用 equals 方法比较字符串,第二个是该字符串将仅匹配名为“*.java”的文件,而不是匹配该模式的文件
  • @user 那么正确的方法是什么?
  • 你只需要if(entry.getFileName().toString().contains(".java"))。或者,如果必须在末尾,.endsWith(".java")
  • @WiktorStribiżew 就是这样!完美运行。谢谢。
  • .endsWith(".java") 将确保字符串以 .java 结尾

标签: java regex nio java-io


【解决方案1】:

你可以检查一下:

if(entry.getFileName().endsWith(".java"))

【讨论】:

  • 这能确保我只得到实际的java 文件吗?还是有什么特殊情况需要检查?
  • 无需检查。您将只获得实际的 java 文件
  • 好的,谢谢。为什么它被否决了..
  • 之前在网站上提出过相同类型的问题。但我还是回答了。这就是为什么可能。如果它对您有用,您可以接受答案。 @克里斯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2011-03-01
  • 2019-08-14
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
相关资源
最近更新 更多