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();
    }
    
Другие вопросы по тегам