Проблем със задача No 3 от Java Streams Homework
Здравейте колеги,
В задачата се изисква файла да бъде презаписан.Открих това ,че в конструктора на FileWriter като втори параметър трябва да подадеш false за да презаписваш а не да append-ваш но явно нещо друго не правя както трябва.Струва ми се че правя нещо като infinite-loop защото аз хем чета хем пиша върху file и очаквам някога (line = bR.readLine()) == null. След като стартирам програмата цялата информация от txt file се изтрива и програмата преключва процеса си.
Колега обаче в условието се иска да презапишем текста UpperCase върху същия файл, а не в друг. Да се записва в друг файл не проблем. Опитах да преименувам новия файл, а стария да го изтрия, но нещо не ми се получава (функциите file.renameTo() & file.delete()). Ако имаш някакви идеи.
новия ти файл има .tmp разширение и посочил ли си, че новия ти файл е наследник на основния ?
ако последния ред липсва, преименуването няма да ти се получи
погледни решението ми : http://pastebin.com/VUWsvrKE
До IskrenPenev
Колега, много благодаря за помощта. Да си призная,получи се малко като копиране на кода - 2 реда, но много важни(което никак не е хубаво). Относно функцията file.delete() - малко ми е странна. От една страна връща boolean, от друга трие файла, т.е. ако успее да изтрие файла, преименува другия, ако не - не. Правилно ли съм разбрал.
Поздрави!
Дори да копираш нещо написано, е хубаво да разбереш как работи.
Това е от документацията на класа File за функцията .delete();
Хубаво е да прочетеш останалото за самата функция, не виждам нужда да копирам всичко.
С други думи последните ми 2 реда код проверяват дали файла може да се изтрие, изтрива го (ако е възможно) и преименува файла в който съм писал.
Това разгледа ли го https://docs.oracle.com/javase/8/docs/api/java/io/File.html#delete%28%29
Благодаря ви за помощта.
Поздрави.
Ако не затвориш writer.close не можеш да делиш и преименуваш. При мене това беше проблема
BufferedReader/ BufferedWriter са в try with resources блок при мен, по този начин когато четенето и писането приключи, потоците се затварят сами и не е нужно да пишеш .close. If-a накрая е извън този блок и съответно извършва проверката само при затворени потоци (важно е също двата файла да са заявени извън try-catch блока).