В каждом цикле вы перезаписываете переменную длины длиной текущей строки.То, что вы должны изменить, это добавить длину текущей строки к вашему итогу.Поэтому удалите оба ваших length = s.length();
и замените их одним оператором length += s.length();
.Я предполагаю, что вы не хотите считать символы новой строки.Смотрите код ниже:
public static void main(String[] args) throws IOException {
int lowercase = 0;
int uppercase = 0;
int length = 0;
File file1 = new File("input.txt");
Scanner scanner = new Scanner(file1);
while (scanner.hasNext()) {
String s = scanner.nextLine();
length += s.length();
System.out.println("new length = " + length);
char[] charAnalysis = s.toCharArray();
for (char element : charAnalysis) {
if (Character.isUpperCase(element)) {
uppercase++;
}
else if (Character.isLowerCase(element)) {
lowercase++;
}
}
}
File file2 = new File("output.txt");
try (PrintStream ps = new PrintStream(file2)) {
ps.println("Number of characters is " + length);
ps.println("Number of lower case letters is " + lowercase);
ps.println("Number of upper case letters is " + uppercase);
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}