Вы уже используете потоки, но самое большое улучшение, которое я предполагаю, заключается в преобразовании потока строк во что-то более удобное:
void login(String file, String userName, String password) throws IOException {
Map<String, String> map = Files.lines(Paths.get(file))
.map(line -> line.split("=", 2))
.filter(array -> array.length == 2)
.collect(Collectors.toMap(
array -> array[0].trim(),
array -> array[1].trim()));
if (map.get("User name").equals(userName)
&& map.get("Password").equals(password)) {
System.out.println("details are correct!!");
} else throw new RuntimeException("Details are not correct!");
}
Вы можете технически использовать filter () и сохранять только правильный пароль / строки пользователя, затем посчитайте элементы в потоке, но это выглядело бы довольно уродливо. IMO.
long count = Files.lines(Paths.get(file))
.map(line -> line.split("=", 2))
.filter(array -> array.length == 2)
.filter(array ->
(array[0].trim().equals("User name") && array[1].trim().equals(userName))
|| (array[0].trim().equals("Password") && array[1].trim().equals(password))
)
.count();
if (count == 2) ...
Это также более подвержено ошибкам, так как файл типа
User name=root
User name=root
допускает любой пароль.Та же проблема существует и в вашем коде.