Java Directory Search - Cast Sensitive и может искать только 1 строку
File fe = new File("C:\\Users\\" + System.getProperty("user.name") + "\\desktop" + "\\SearchResults.txt");
String customLoca = "C:\\Users\\" + System.getProperty("user.name") + "\\AppData" + "\\roaming" + "\\.minecraft" + "\\mods" + "\\1.7.10";
FileWriter fw = null;
try {
fw = new FileWriter(fe);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
File dir = new File(customLoca);
for (File f : dir.listFiles()) {
if (f.getName().contains("Toggle")){
try {
fw.write("Found: " + f.getName());
fw.write("\r\n===");
fw.write("\r\n");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
try {
fw.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
По сути, приведенный выше код создает текстовый документ с результатами в. Это работает, однако я должен сделать его точным с учетом файла, который я хочу найти. Например, если бы я заменил "Toggle" на "toggle", ничего бы не появилось. Есть ли способ, которым я могу сделать это без учета регистра? Кроме того, есть ли способ, которым я могу добавить еще аргумент. Поэтому, если ничего не найдено, в текстовом документе будет напечатано "Ничего не найдено". Благодарю.
2 ответа
Вы можете попробовать с !string.equalsIgnoreCase()
в вашем чеке - попробуйте применить что-то вроде этого:
if (!toggle.equalsIgnoreCase(file.getName()))
РЕДАКТИРОВАТЬ:
Вы также можете попытаться изменить этот фрагмент кода:
StringBuilder paragraph = new StringBuilder();
paragraph.append("I am at office.")
.append("I work at oFFicE.")
.append("My OFFICE");
String searchWord = "office";
Pattern pattern = Pattern.compile(searchWord, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(paragraph);
int count = 0;
while (matcher.find())
count++;
System.out.println(count);
Невозможно использовать equalsIgnoreCase(), потому что оно требует совпадения всего имени. рекомендации:
используйте регулярное выражение, чтобы соответствовать вашему имени
использовать попробуйте с ресурсами
попытка может охватывать весь метод, несколько попыток медленнее
использовать StringBuilder для кошачьей строки (не так критично, как раньше)
Java не требует \r - \n напишет соответствующую новую строку ОС
Никогда не улавливай исключения, это чрезмерная генерализация
Вы можете использовать String "reset" вместо else, хотя остальное также работает.
File fe = new File("C:\\Users\\" + System.getProperty("user.name") + "\\desktop" + "\\SearchResults.txt"); String customLoca = "C:\\Users\\" + System.getProperty("user.name") + "\\AppData" + "\\roaming" + "\\.minecraft" + "\\mods" + "\\1.7.10"; try (FileWriter fw = new FileWriter(fe)) { File dir = new File(customLoca); for (File f : dir.listFiles()) { String contents = "Nothing Found"; if (f.getName().matches("(?i).*toggle.*"))); { contents = new StringBuilder("Found: ") .append(f.getName()) .append("\n===\n").toString(); } fw.write(contents); } } catch (IOException ioe) { ioe.printStackTrace(); }