Софтуерно Инженерство
Loading...
+ Нов въпрос
Shirdor avatar Shirdor 130 Точки

ALL CAPITALS взима null

здравейте. ето го кода ->http://pastebin.com/yVcjDfB2

проблема ми е че в инпут взима nullи то след това нормално да не си върви.

Тагове:
0
Java Advanced
MapuH avatar MapuH 35 Точки
Best Answer
PrintWriter pW = new PrintWriter(new FileWriter("lines"));

Tова ти изтрива съдържанието на входящия файл. Първо го прочети и обработи редовете, а чак накрая пиши върху него. ;)

2
Filkolev avatar Filkolev 4501 Точки

Искаш да кажеш, че input по начало е null? Според документацията, readLine() методът връща null, когато е достигнат края на стрийма. Провери си файла, от който четеш, изглежда е празен.

1
IskrenPenev avatar IskrenPenev 177 Точки

Мисля, че трябва да затвориш потока след четенето, да го flush-неш и тогава да преминеш към писане.

Освен това това взема null понеже на след всички операции в while цикъла ти input отново чете следващия ред, (а след последния ред с текст, следващия е null ) тоест за последна стойност на input винаги имаш null.Това можеш да го оправиш така: 

        String input;
        ArrayList<String> strings = new ArrayList<>();
        while ((input=bR.readLine()) != null) {
            strings.add(input.toUpperCase());
        }

Още един съвет от мен е да ползваш try-with-resources за да ловиш грешките и да си спестиш "ръчното" затваряне и обновяване на потока. ( правиш си по 1 блок за reader и 1 за writer)

1
Shirdor avatar Shirdor 130 Точки

блаодаря ви много. цялата работа беше че pW прецакваше всичко. пак много благодаря.

0
baxlash avatar baxlash 31 Точки

Когато създаваш PrintWriter, той ти реиницилизира файла, т.е. изтрива всичко, което е в него. А когато се опитваш да четеш от празен файл, винаги ще ти връща null, защото няма какво да прочете.

Трябва първо да прочетеш информацията във файла и да я запазиш в подходяща форма, след това да създадеш PrintWriter и да запишеш обработената информация обратно във файла.

1