2014-01-22 6 views
0
BufferedReader rea = new BufferedReader(new FileReader("points.txt")); 
BufferedWriter writ = new BufferedWriter(new FileWriter("points.txt")); 

ArrayList<String> top = new ArrayList<String>(); 

// checking if file is empty, so it enters imaginary players and scores 
// if it is. 
if (rea.readLine() == null) { 
    for (int i = 1; i < 6; i++) { 
     writ.write("Player" + i + "\t\t" + "99:99"); 
     writ.newLine(); 
    } 
} 
while ((readthis = rea.readLine()) != null) { 
    top.add(readthis); 
} 

Так что случается так, что даже если в моем файле «points.txt» уже есть некоторые встроенные игроки внутри, он по-прежнему возвращает true в том первом, если предложение, поэтому новые игроки печатают в файл. Но проблема в том, что когда я пытаюсь прочитать файл в течение некоторого предложения, он даже не проходит через него. Я проверил с System.out.println() и выяснил, что он возвращает null. Как он может вернуть значение null, даже если я видел, что он заполняет новые данные? Что я делаю неправильно? Я борюсь с этой проблемой уже около полутора часов, пробовал все, что знаю. Любая помощь очень ценится.BufferedReader возвращает значение null, даже если в файле есть текст

+0

В первом цикле вы должны очистить свой 'writer' – nachokk

+0

Это совет, который использует список top = new ArrayList (); вместо ArrayList top = new ArrayList (); – ashokramcse

+0

@ashokramcse также использует '<>' алмазный вывод, если он использует java 7 или выше! – nachokk

ответ

0

Пожалуйста, поймите, что чтение и запись в файл одновременно с использованием BufferedReader/Writer на самом деле не очень хорошая идея.

При использовании буферизованного считывателя или записывающего устройства нет гарантии, когда будет выполнено фактическое чтение и запись.

При этом исправление заключается в том, чтобы установить отметку на считывателе до достижения конца файла, а также закрыть (или, по крайней мере, промыть) выходной поток. Это заставит BufferedWriter фактически записать содержимое в файловую систему и позволить читателю прочитать новый контент.

Примечание: Вы можете обнаружить, что на некоторых файловых системах такой подход не будет работать.

rea.mark(4048); // Set mark at beginning of file  
if (rea.readLine() == null) { 
    for (int i = 1; i < 6; i++) { 
     writ.write("Player" + i + "\t\t" + "99:99"); 
     writ.newLine(); 
    } 
    writ.close(); 
    rea.reset(); 
} 

Это сказанное, я думаю, что лучше было бы проверить длину и наличие файла перед тем пытается читать из него. См. Образец ниже.

File file = new File("points.txt"); 

// checking if file is empty, so it enters imaginary players and scores 
// if it is.' 
if ((!file.exists()) || (file.length() == 0)) { 
    try (BufferedWriter writ = new BufferedWriter(new FileWriter(file))) { 
     for (int i = 1; i < 6; i++) { 
      writ.write("Player" + i + "\t\t" + "99:99"); 
      writ.newLine(); 
     } 
    } 
    // writ is closed by the try() 
} 
try (BufferedReader rea = new BufferedReader(new FileReader(file))) { 
    ArrayList<String> top = new ArrayList<String>(); 

    String readthis; 
    while ((readthis = rea.readLine()) != null) { 
     top.add(readthis); 
    } 
} 
// rea is safely closed by the try() 

Создание потока было помещено в блоки try(), чтобы они были безопасно очищены.

Надеюсь, это поможет.

3

Этот код

BufferedWriter writ = new BufferedWriter(new FileWriter("points.txt")); 

перезаписывает исходный файл.

использование

BufferedWriter writ = new BufferedWriter(new FileWriter("points.txt"),true); 

приложить

4

С помощью new BufferedWriter(new FileWriter("points.txt")); переопределения предыдущего содержимого файла. Если вы хотите добавить новое содержание в конце существующего файла, который нужно использовать конструктор с аргументом boolean append как

new BufferedWriter(new FileWriter("points.txt"),true); 

Также не забудьте очистить/закрыть чтения/записи.

+1

То, что он спрашивает, почему он не читает, даже если он просто напишет в него, и ответ - он не «замалчивает/закрывает» автора +1 для указания этого! – nachokk

Смежные вопросы