Если вам разрешено использовать Java 8 потоков и такие «новые» объекты ввода-вывода, как Files и Path, вы можете выполнить эту задачу довольно просто:
Map<Character, Long> freq = Files.lines(Path.of(filepath)) // get stream of file lines
.flatMap(s -> s.chars().mapToObj(c -> (char) c)) // convert each line into stream of characters
.collect(
Collectors.groupingBy(Function.identity(), // group by each character
Collectors.counting())); // count characters in the stream
Если вам нужно только считать буквы, их можно дополнительно отфильтровать:
Map<Character, Long> letterFreq = Files.lines(Path.of(filepath))
.flatMap(s -> s.chars().mapToObj(c -> (char) c))
.filter(Character::isLetter)
.collect(
Collectors.groupingBy(Function.identity(), Collectors.counting()));