Не удается выполнить запись в созданный HTML-файл на Java

#java #html #file #filewriter #bufferedwriter

#java #HTML #файл #filewriter #bufferedwriter

Вопрос:

Вот мой код:

 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 нет.

Комментарии:

1. catch (Exception e) { index ;} Разве вы не должны делать что-то полезное с исключением вместо увеличения индекса, который вы даже не используете? Даже просто напечатать сообщение об исключении. Это может дать вам гораздо больше информации о проблеме.

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

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

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

Ответ №1:

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

         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 не нужны.

Ответ №2:

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

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