#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())
...