問題:我有一個700字符串的數組,我正在讀入List。然後我有一個包含1500多個文件的目錄。我需要打開這些文件中的每一個,看看700個字符串中是否有任何一個出現在每個文件中的任何位置。加速讀取多個文件並將其內容與多個字符串進行比較
目前的解決方案:閱讀在700個字符串(這是幾乎瞬時)之後,這是我在做什麼:
public static void scanMyDirectory(final File myDirectory, final List<String> listOfStrings) {
for (final File fileEntry : myDirectory.listFiles()) {
System.out.println("Entering file: " + currentCount++);
if (fileEntry.isDirectory()) {
scanMyDirectory(fileEntry, listOfStrings);
} else {
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(fileEntry.getPath()));
while ((sCurrentLine = br.readLine()) != null) {
for (int i = 0; i < listOfStrings.size(); i++) {
if (org.apache.commons.lang3.StringUtils.containsIgnoreCase(sCurrentLine, listOfStrings.get(i))) {
matchLocations.put(listOfStrings.get(i), fileEntry.getPath());
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
}
調用這個程序後,我已經存儲在所有結果一個HashMap和我可以輸出結果到屏幕或文件。
問題:什麼是更快的方法來做到這一點?它看起來非常慢(大約需要20-25分鐘才能運行1500個文件)。我對線程不是很熟悉,但我曾考慮過使用它。然而,this question的最佳答案讓我有點失望。什麼是加速表現的最佳方式?
根據你所鏈接的答案,多線程這不會是一個好主意。您是否使用NIO,正如答案所示? – Azar 2014-11-03 11:48:27
不,這是我正在考慮的另一件事。在深入研究特定路線之前,我希望能夠儘可能多地評估答案。 – 2014-11-03 11:50:35
您鏈接的答案是正確的。除非你從15個不同的SSD讀取文件,否則將是瓶頸。 – Michael 2014-11-03 11:50:58