2014-10-20 57 views
1

我有一对文件夹。对共享文件名,但具有不同的扩展名(在这种情况下,它们是.txt和.png对)。我正在寻找将它们存储到HashMap <文件,文件>成对。这是我做过什么,找到对的:更有效的文件对排序

LinkedList<File> fileList = new LinkedList<File>(Arrays.asList(fileArray)); 
LinkedList<File> alreadyCompared = new LinkedList<File>(); 

HashMap<File, File> filePairs = new HashMap<File, File>(); 

for (Iterator<File> itr1 = fileList.iterator(); itr1.hasNext();) { 

    File comparator = itr1.next(); 

    if (!alreadyCompared.contains(comparator)) { 

     String stringComparator = comparator.getName().split("\\.")[0]; 
     alreadyCompared.add(comparator); 

     for (Iterator<File> itr2 = fileList.iterator(); itr2.hasNext();) { 

      File compared = itr2.next(); 

      if (!alreadyCompared.contains(compared)) { 

       String stringCompared = compared.getName().split("\\.")[0]; 

       if (stringComparator.equals(stringCompared)) { 

        if (comparator.getName().endsWith("txt")) { 

         filePairs.put(comparator, compared); 

        } else { 

         filePairs.put(compared, comparator); 
        } 
       } 
      } 
     } 
    } 
} 

return filePairs; 

现在,这需要大量的时间当我有超过1000个文件进行排序,我想找到做的更有效的方法它。我还可以用其他方式对这些文件进行排序

非常感谢!

+1

我有点迷路。问题是只用相同的名称对文件进行分组(忽略扩展名)? – 2014-10-20 13:59:47

+0

只是猜测,如果你认为你在txt中的文件是在PNG中,为什么要比较所有这些文件而不直接检索png? – KBorja 2014-10-20 14:01:27

+0

为什么要存储文件?为什么不存储文件的名称,然后根据需要获取它们? – brso05 2014-10-20 14:05:05

回答

1

而不是把它们放在一个无序MapHashMap,我会把元素放在TreeMap,因为它排序它的键。

每所链接的Javadoc,

红黑树基于NavigableMap实现。该地图根据其密钥的natural ordering或地图创建时提供的Comparator进行排序,具体取决于使用哪个构造函数。

+0

我不需要特别订购他们,我只是需要他们配对。你如何建议我使用TreeMap来做到这一点? – Laura 2014-10-20 14:11:58

0

我编了一段代码来说明我的意见。

HashMap<File, File> filePairs = new HashMap<File, File>(); 

File dir = new File("your files directory"); 
File [] files = dir.listFiles(new FilenameFilter() { 
    @Override 
    public boolean accept(File dir, String name) { 
     return name.endsWith(".txt"); 
    } 
}); 

String fileName = ""; 

for (File txtFile : files) { 
    fileName = txtfile.getName().split("\\.")[0]; 
    pngFile = new File(dir.getAbsolutePath() + fileName + ".png"); 

    if (pngFile.exists()) { 
     filePairs.put(txtFile, pngFile); 
    } 
}