2016-08-11 6 views
-1

Я пытаюсь написать класс, который обрабатывает файлы чтения. Чтобы читать файл словом, я использовал следующий код, который я нашел в Интернете. Netbeans, по-видимому, не согласен и говорит, что он не может найти символ bb внутри цикла while.BufferReader внутри условия try: не удается найти символ

public class Reader { 
    public String file2string() { 
    String line; 
    try (InputStream fis = new FileInputStream("smth")) { 
     InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); 
     BufferedReader br = new BufferedReader(isr); 
    } catch (IOException ex) { 
     Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    { 
     while ((line = br.readLine()) != null) { 
     String[] words = line.split(" "); 
     // Now you have a String array containing each word in the current line 
     } 
    } 
    return line; 
    } 
} 
+1

Пожалуйста отступы ваш код правильно, если вы просите людей попробовать и прочитать его. – khelwood

+1

ваш 'while loop' находится за пределами' try-catch', поэтому переменная 'br' выходит за рамки области – SomeJavaGuy

ответ

1

Ваша петля отсутствует try, поэтому переменная br неизвестна в контексте. Поместите свой while-loop внутри try структуры, как здесь:

public String file2string() { 
    String line = null; 
    try (InputStream fis = new FileInputStream("smth")) { 
     InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); 
     BufferedReader br = new BufferedReader(isr); 

     while ((line = br.readLine()) != null) { 
      String[] words = line.split(" "); 
      // Now you have a String array containing each word in the current line 
     } 
    } catch (IOException ex) { 
     Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return line; 
} 
1

У вас есть {} блока после Ьги заявления

{ 
    InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); 
    BufferedReader br = new BufferedReader(isr); 
} 

И тогда у вас есть еще один {} блока.

{ 
    while ((line = br.readLine()) != null) { 
     String[] words = line.split(" "); 
     // Now you have a String array containing each word in the current line 
    } 
} 

Переменные, объявленные в первом блоке, не видны во втором блоке.

Объединить два блок:

public String file2string() { 
    String line; 
    try (InputStream fis = new FileInputStream("smth")) { 
     InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); 
     BufferedReader br = new BufferedReader(isr); 
     while ((line = br.readLine()) != null) { 
      String[] words = line.split(" ");   
     } 
     return line; 
    } catch (IOException ex) { 
     Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    // you need to decide what you want to return here if you got an exception. 
} 

Вы, кажется, разделив каждую строку и игнорируя результат, а затем возвращаются в последнюю строке файла. Я не знаю, почему вы это делаете или что вы на самом деле пытаетесь сделать; но это как исправить ошибку компиляции.

+0

Как решить проблему? Я не могу объявить buffeedreader перед declarinf inputstreamreader – Majd

+0

В принципе, поместите код, который использует 'br' >> внутри << блока' try'. –

1

Переменная «br» объявляется в блоке try {}, поэтому это ее область видимости. Он не будет виден вне этого блока. Попробуйте поместить цикл while внутри блока try.