Как правильно закрыть потоки input и output? Пробовал выносить их перед блоком try и закрывать в finally, но компилятор пишет ошибку и просит опять обработать их с try catch. Я уже из-за этого немного запутался. Валидатор JavaRush такое решение принял, но я понимаю, что закрывать потоки в блоке try неправильно, ведь если ошибка возникнет строчками выше, то они так и не закроются
public class Solution {
    public static void main(String[] args) {
        System.out.println("Введите путь к файлу 1: ");

        try (Scanner scanner = new Scanner(System.in)) {
            InputStream input = Files.newInputStream(Path.of(scanner.nextLine()));
            OutputStream output = Files.newOutputStream(Path.of(scanner.nextLine()));

            while (input.available() > 0) {
                if (input.available() == 1) {
                    output.write(input.read());
                    break;
                }

                int first = input.read();
                int second = input.read();
                output.write(second);
                output.write(first);
            }

            input.close();
            output.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}