java - 如何对字符串进行排序[即基于特定名称的文件名集]

标签 java

当前,在运行我的 ListFiles() 后,我得到了从目录中获取的文件名列表,并需要将其作为输入,下面是我得到的 xml 文件。

我获得文件名列表的代码是:

 String dirPath = "D:\\Input_Split_xml";
       File dir = new File(dirPath);
      String[] files = dir.list();
       for (String aFile : files) 
       {
              System.out.println("file names are "+aFile);
          }

Currently all the File names are stored in "aFile" :

file names are 51090323-005_low_level.xml
file names are 90406990_low_level.xml
file names are 90406991_low_level.xml
file names are TC_CADBOM_51090323-005_low_level_BOM.xml
file names are TC_CADBOM_90406990_low_level_BOM.xml
file names are TC_CADBOM_90406991_low_level_BOM.xml
file names are TC_CADDESIGN_51090323-005_low_level.xml
file names are TC_CADDESIGN_90406990_low_level.xml
file names are TC_CADDESIGN_90406991_low_level.xml

现在我需要按以下方式对这些文件名进行排序,以便将它们视为解析 xml 文件的输入。

1)例如:基于“51090323-005”编号,我需要对该编号下的所有文件名进行分组,并将它们一个接一个地作为输入,并使用它来获取每个 xml 的节点计数。 IE。 这些是该编号下的 3 个 XML,因此我将收集所有这些并逐个使用它们。

 a)51090323-005_low_level.xml
 b)TC_CADBOM_51090323-005_low_level_BOM.xml
 c)TC_CADDESIGN_51090323-005_low_level.xml

专家需要您的帮助来解决这个问题

最佳答案

此函数返回一个映射,其中每个条目对应于一组相关文件。 借助正则表达式,可以轻松验证文件名模式并提取数字部分(请参阅 group(1) )

// key=number, value=array of matching files, sorted
public static Map<String, File[]> process(String fileLocation) {
    Map<String, File[]> fileMap = new HashMap<>();
    Pattern startFileNamePattern = Pattern.compile("([0-9-]+)_low_level.xml");
    File dir = new File(fileLocation);
    File[] startFiles = dir.listFiles((File file, String name) -> startFileNamePattern.matcher(name).matches());
    for (File f : startFiles) {
        Matcher m = startFileNamePattern.matcher(f.getName());
        if (m.matches()) {
            String number = m.group(1);
            File[] allFiles = dir.listFiles((File arg0, String name) -> name.contains(number));
            Arrays.sort(allFiles);
            fileMap.put(number, allFiles);
        }
    }
    return fileMap;
}

关于java - 如何对字符串进行排序[即基于特定名称的文件名集],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56038577/

相关文章:

Java - 无法从文本文件中读取特殊字符

java - 在 "killed"之后在后台运行 Android 应用程序

java - 在远程计算机上启用端口 8443 以进行 https 访问

java - 更改按钮大小 FlowLayout

java - 如何使用 Eclipse 在本地服务器上从 GitHub 运行 Web 应用程序?

java - 如何使用 Swing 在 JFrame 中添加面板

java - 如何从随机访问文件中删除特定行

java - 如何在 GC 内绘制旋转文本

java - 像 Windows Phone 7/.NET 中那样的数据绑定(bind)?

java - 无法通过 KafkaIO 在光束中读取 kafka