概览
我正在将一个简单的实用程序应用程序从 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/