当前,在运行我的 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/