Невозможно записать в созданный файл HTML в Java

Вот мой код:

public static void create() {
        String path = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath() + "\\JWPLfile";
        int index = 0;
        while (true) {
            try {
                File f = new File(path + index + ".html");
                BufferedWriter bw = new BufferedWriter(new FileWriter(f));
                bw.write(fileContent);
                break;
            } catch (Exception e) {
                index++;
            }
        }
    }

Но вновь созданный файл HTML пуст, хотя fileContent — нет.

catch (Exception e) { index++;} Разве вы не должны сделать что-то полезное с исключением вместо увеличения индекса, который вы даже не используете? Даже просто распечатать сообщение об исключении. Это может дать вам гораздо больше понимания проблемы.
Federico klez Culloca 13.12.2020 22:08

Вы закрыли выходной файл? Я не вижу доказательств в вашем коде, что вы сделали. Используйте попытку с ресурсами, чтобы автоматически закрыть его.

Jim Garrison 13.12.2020 22:09

Я использую index, чтобы указать имя файла. Я думал, что если я не могу создать файл, то файл с таким именем уже существует, поэтому я пытаюсь увеличить его. Что еще я могу сделать с исключением, кроме как распечатать сообщение об исключении? @FedericoklezCulloca

Hrodrsvitnir In Chains 13.12.2020 22:12

Да, это было! Если вы напишете ответ, я выберу в качестве ответа. Спасибо @JimGarrison

Hrodrsvitnir In Chains 13.12.2020 22:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
148
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны убедиться, что файл закрыт. Используйте попытку с ресурсами, как в:

        File f = new File(path + index + ".html");
        try (FileWriter fw = new FileWriter(f)) {
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(fileContent);
            break;
        } catch (Exception e) {
            index++;
        }

Обратите внимание, что (по сути) пустой блок catch скроет от вас любые исключения. Не хорошая идея.

Кроме того, while(true) и break не нужны.

Как говорит ответ Джима, пустой блок catch - плохая идея. Вместо этого сначала проверьте, существует ли файл, и увеличивайте index до тех пор, пока он не исчезнет:

int index = 0;
File f;
do {
  f = new File(path + index++ + ".html");
} while (f.exists())
...

Другие вопросы по теме