2015-08-18 3 views
0

Моя программа не может прочитать txt-файл, который находится в многострочном формате. Содержимое текстового файла должно быть напечатано внутри textArea, но когда дело доходит до многострочных файлов, ничего не происходит. Также я хотел бы выслать сообщение: «Файл Existed», когда файл существует, и «Файл не найден», когда файл не существует.Считыватель входных потоков с многострочным текстовым файлом

Вот мой код:

BufferedReader br = null; 
try { 
    String sCurrentLine; 

    br = new BufferedReader(new FileReader("C:\\Users\\theBeard\\workspace\\LeapYear\\"+textField.getText())); 

    while ((sCurrentLine = br.readLine()) != null) { 
     textArea.setText(sCurrentLine); 
    } 
     br.close(); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally { 
    try { 
     if (br != null)br.close(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

также, этот метод правильно, чтобы проверить, существует ли файл?

try { 

       String sCurrentLine; 

       br = new BufferedReader(new FileReader("C:\\Users\\theBeard\\workspace\\LeapYear\\"+textField.getText())); 
       textArea.read(br, textArea);//this was a suggestion  by  someone below 


       while ((sCurrentLine = br.readLine()) != null) { 



        textArea.append(sCurrentLine); 
        textArea.append(System.lineSeparator()); 
       } 

      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } finally { 
       try { 
        if (br != null) 
        { 

         br.close(); 
        } 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       } 
      } 
+0

Спасибо всем. все кристально чисто. :) – rookProgrammer

+0

еще одна мелочь ребята, если я хочу пригласить сообщение о том, что файл не найден, куда его поместить? благодаря! – rookProgrammer

+0

Если у вас есть новый вопрос, задайте его в новом вопросе. Для этого есть как минимум две причины: (1) не многие люди прочтут ваш комментарий и этот дополнительный вопрос сейчас (2), это не связано с проблемой, которую вы сейчас имеете. – Pshemo

ответ

1
public void setText(String t) 

Устанавливает текст этого TextComponent к указанному тексту. Если текст является нулевым или пустым, это приводит к простому удалению старого текста.

textArea.setText(sCurrentLine) перезаписывает весь текст текстовой области для каждой строки. Если ваша последняя строка в файле - это строка emtpy, ваша текстовая область будет пустой.

0

Ну, если ваша последняя строка пуста, единственное, что будет установлено, это пустая строка, так как вы всегда перезаписываете текст в своей текстовой области. Я хотел бы предложить использовать StringBuilder, чтобы прочитать весь файл в ...

StringBuilder sb = new StringBuilder(); 
... read via BufferedReader 
sb.append(sCurrentLine); 

...set whole text... 
textArea.setText(sb.toString()); 
0
while ((sCurrentLine = br.readLine()) != null) { 
    textArea.setText(sCurrentLine); 
} 

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

Получите предыдущее значение, а затем добавьте его.

while ((sCurrentLine = br.readLine()) != null) { 
    String x = textArea.getText().toString(); 
    textArea.setText(x + sCurrentLine); 
} 
3

textArea.setText(sCurrentLine); не добавить текст в область, но заменяет его с новым текстом. Таким образом, ваш код будет устанавливать текст в последнюю строку из вашего текстового файла. Поэтому, если ваша последняя строка пуста, вы ничего не увидите.

Возможно, вы захотите использовать метод append.

Также вы не закрываете свои ресурсы в нужном месте, так как это должно быть сделано только в блоке finally. Подумайте, используя try-with-resources, которые будут обрабатывать его для вас.

Так что попробуйте с чем-то вроде

try (BufferedReader br = new BufferedReader(
     new FileReader("C:\\Users\\theBeard\\workspace\\LeapYear\\"+ textField.getText()))) { 
    String sCurrentLine; 
    while ((sCurrentLine = br.readLine()) != null) { 
     textArea.append(sCurrentLine); 
     textArea.append(System.lineSeparator()); 
    } 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+0

uhm, еще одна вещь, я хотел бы выслать сообщение: «Файл не найден». Где его разместить? благодаря! – rookProgrammer

+0

Вы могли бы обработать его разными способами. Сначала вы можете попробовать создать «Путь» к этому файлу, а затем проверить, соответствует ли такой путь правильному файлу с помощью 'Files.exist (path)'. Если файл существует, продолжайте с кодом, если не запрашиваете правильное расположение файла. Мы также могли бы обрабатывать «NoSuchFileException», но это обычно плохое решение, поскольку исключения не должны быть частью стандартной логики, но они должны обрабатывать исключительные ситуации, которые мы не можем предотвратить. – Pshemo

+1

textArea.read (Buff ....) – mKorbel

3

Append текст вместо того, чтобы установить его для каждой итерации

textArea.append(sCurrentLine + System.getProperty("line.separator")); 
+1

textArea.read (Buff ....) – mKorbel

+0

@mKorbel да, это было бы намного проще или конечно :) – Reimeus

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