2014-10-20 26 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); 
    } 
}