Loading...
kokibg3 avatar kokibg3 12 Точки

Проблем със задача No 3 от Java Streams Homework

Здравейте колеги,

В задачата се изисква файла да бъде презаписан.Открих това ,че в конструктора на FileWriter като втори параметър трябва да подадеш false за да презаписваш а не да append-ваш но явно нещо друго не правя както трябва.Струва ми се че правя нещо като infinite-loop защото аз хем чета хем пиша върху file и очаквам някога (line = bR.readLine()) == null. След като стартирам програмата цялата информация от txt file се изтрива и програмата преключва процеса си.

тук

Тагове:
0
Java Advanced 20/03/2016 08:23:44
baxlash avatar baxlash 31 Точки

Това е моят варинт на тази задача: цък

Аз изполвам PrintWriter, за да пиша във файла, защото предлага по-добро форматиране на текста.

0
Nick_89 avatar Nick_89 2 Точки

Колега обаче в условието се иска да презапишем текста UpperCase върху същия файл, а не в друг. Да се записва в друг файл не проблем. Опитах да преименувам новия файл, а стария да го изтрия, но нещо не ми се получава (функциите file.renameTo() & file.delete()). Ако имаш някакви идеи.

0
IskrenPenev avatar IskrenPenev 177 Точки

новия ти файл има .tmp разширение и посочил ли си, че новия ти файл е наследник на основния ?

File path = new File("resources/AllCapitals/lines.txt");
        File finalPath = new File (path + ".tmp");
        finalPath.getParentFile().mkdirs();

ако последния ред липсва, преименуването няма да ти се получи

погледни решението ми : http://pastebin.com/VUWsvrKE

0
Nick_89 avatar Nick_89 2 Точки

До IskrenPenev

Колега, много благодаря за помощта. Да си призная,получи се малко като копиране на кода - 2 реда, но много важни(което никак не е хубаво). Относно функцията file.delete() - малко ми е странна. От една страна връща boolean, от друга трие файла, т.е. ако успее да изтрие файла, преименува другия, ако не - не. Правилно ли съм разбрал.

Поздрави!

0
IskrenPenev avatar IskrenPenev 177 Точки

Дори да копираш нещо написано, е хубаво да разбереш как работи.

Това е от документацията на класа File за функцията .delete();

@return  <code>true</code> if and only if the file or directory is
*          successfully deleted; <code>false</code> otherwise

Хубаво е да прочетеш останалото за самата функция, не виждам нужда да копирам всичко.

С други думи последните ми 2 реда код проверяват дали файла може да се изтрие, изтрива го (ако е възможно) и преименува файла в който съм писал.

 

0
Nick_89 avatar Nick_89 2 Точки

Благодаря ви за помощта.

Поздрави.

0
prohause avatar prohause 356 Точки

Ако не затвориш writer.close не можеш да делиш и преименуваш. При мене това беше проблема

0
IskrenPenev avatar IskrenPenev 177 Точки

BufferedReader/ BufferedWriter са в try with resources блок при мен, по този начин когато четенето и писането приключи, потоците се затварят сами и не е нужно да пишеш .close. If-a накрая е извън този блок и съответно извършва проверката само при затворени потоци (важно е също двата файла да са заявени извън try-catch блока).

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.