c# - 在 Java 中复制 Directory.GetFiles(String, String)

标签 c# java

概览

我正在将一个简单的实用程序应用程序从 C# 移植到 Java,作为其中的一部分,我正在为我更喜欢 C# 语义的项目编写一些帮助程序方法。一旦这样的情况是Directory.GetFiles .

当前代码

import java.io.File;
import java.io.FilenameFilter;

public class Directory {
    public static String[] GetFiles(String path) {        
        File directory = new File(path);
    
         return directory.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String filename) {
                return new File(dir, filename).isFile();
            }
        });
     }
}

问题

虽然上面的一切看起来都很好,并且复制了一个 GetFiles 重载,但我仍然坚持如何最好地编写一个方法来复制 C# 的 Directory.GetFiles(String, String) 的功能。 .

此方法应采用 path 字符串以及 searchPattern,后者用于仅返回与该特定模式匹配的文件。

例如,以下每一项都应该有效:

// Used to get all JavaScript files
Directory.GetFiles("~/Documents/", "*.js");

// Get all CSS files in the styles sub-folder.
Directory.GetFiles("~/Documents/", "styles/*.css"); 

最佳答案

您可以通过在每个星号和问号之前放置一个句点来修改模式,然后将其用作正则表达式来确定应返回哪些文件。所以,你可以这样写

public static String[] GetFiles(final String path, final String searchPattern) {
    final Pattern re = Pattern.compile(searchPattern.replace("*", ".*").replace("?", ".?"));
    return new File(path).list(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return new File(dir, name).isFile() && re.matcher(name).matches();
        }
    });
}

关于c# - 在 Java 中复制 Directory.GetFiles(String, String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143056/

相关文章:

c# - 在 C# 中将 DirectSound CaptureBuffer 的内容写入 WAV 文件

c# - 如何处理像 Mongo 这样的文档数据库中单独存储的对象的引用?

c# - 为什么这个用户控件扩展中的所有对象在运行时都是空的?

java - 如何使用 Lambda 和 Streams 在 Java 8 中反转单个字符串?

java - 需要帮助在 Java 中查找正则表达式来捕获字符串中所有格式的日期

c# - 正则表达式查找字符串中的重复模式

c# - 错误 : "Operation is not valid due to the current state of the object"

java - Servlet eclipse 无法识别制表符

java - Future.cancel(true) 下面发生了什么

java - 在将其存储在数组列表中的文件中查找一个单词并确保该单词不会被多次占用?