Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java8查找文件的最佳方法是什么?_Java_File_Java 8 - Fatal编程技术网

使用Java8查找文件的最佳方法是什么?

使用Java8查找文件的最佳方法是什么?,java,file,java-8,Java,File,Java 8,我想从目录中读取文件 所有startswith(例如:我们有一个startswith名称列表) 以“abcd_”开头 以“Proto_”开始 以“foo_u2;”开始 从“2020”开始 从……开始 另一个条件是endswith“.txt” 现在我们来看一个场景,在目标目录中,我们有数千个文件 那么,获得与上述条件匹配的所有文件的有效方法是什么呢 **注意:Startswith是一个动态列表,目标目录每天都会加载大量文件,但最多只有一个对应的文件匹配,即使文件数量在增加** 我已经

我想从目录中读取文件

所有startswith(例如:我们有一个startswith名称列表)

  • 以“abcd_”开头

  • 以“Proto_”开始

  • 以“foo_u2;”开始

  • 从“2020”开始

  • 从……开始

    另一个条件是endswith“.txt”

现在我们来看一个场景,在目标目录中,我们有数千个文件

那么,获得与上述条件匹配的所有文件的有效方法是什么呢

**注意:Startswith是一个动态列表,目标目录每天都会加载大量文件,但最多只有一个对应的文件匹配,即使文件数量在增加**

我已经写了一个原型

Map<String,String> getFilesMap(Path path)    
{
Map<String, String> fatchedFileMap = new HashMap<>();
    
    List<String> fileNamePrefixes = getFileNamePrefixes();
    
   //Using File Filter implementation
    path.toFile().listFiles( (dir, fileName) -> {

        for (String fileNamePrefix : fileNamePrefixes) {
            if (fileName.endsWith (".txt") && fileName.startsWith(fileNamePrefix)))
             {
                fatchedFileMap.put(fileNamePrefix, fileName);
                return true;//does nothing 
            }
        }
        return false;//does nothing 
    });

    return fatchedFileMap;
}
Map getFilesMap(路径)
{
Map fatchedFileMap=newhashmap();
List fileNamePrefixes=getFileNamePrefixes();
//使用文件过滤器实现
path.toFile().listFiles((目录,文件名)->{
for(字符串filenameprifix:filenameprifixes){
if(fileName.endsWith(“.txt”)&&fileName.startsWith(fileNamePrefix)))
{
put(文件名前缀,文件名);
返回true;//不执行任何操作
}
}
return false;//不执行任何操作
});
返回fatchedFileMap;
}
这将为我提供名称与前缀匹配的所有文件(提供的列表)

但如果有更好的方法,也要寻找更好的方法


我不想介绍任何第三方库,但仍然欢迎使用所有解决方案。

我建议您使用或根据您的要求使用。

返回true/false?你在第一个文件处停下来?文件名上有图案吗?就像您可以拆分名称一样,每个“uu”字符或前缀的长度始终为n个字符;后缀是文件后缀,所以在最后一个“.”之后…我会首先讨论这个问题。目录不是数据库,不应用于数千个必须按顺序搜索的项目。Windows有快速通配符匹配的目录API,但此Java代码不能使用它们。@如果要实现筛选器,实际上我正在将匹配的文件名添加到映射中,则返回true/false。名称模式是类似于xyz_yyyymmdd的currentdate,并且已经在getFileNamePrefixes()@user207421中处理过,“Windows具有快速通配符匹配目录API”实际上是什么,我可以只使用核心java吗
listFiles
的目的是返回过滤后的文件数组,而不是在过滤器中执行其他操作并忽略结果。此外,您还重复了
fileName.endsWith(“.txt”)
检查每个前缀,尽管结果在循环过程中不会改变。当它的计算结果为
false
时,这尤其浪费时间,因此您可以跳过整个循环…正如您所看到的,我已经将FileFilter实现用于Lambda,您是否可以编写符合上述要求的代码。