2012-07-01 1 views
0

Я пишу класс, который просто читает текстовый файл и печатает строки. Я получаю сообщение об ошибке в строке, содержащей BufferedReader rd = new BufferedReader (новый FileReader («file.txt»)); говоря, что Синтаксическая ошибка на токене ";", {ожидается после этого токена. Я попытался разместить его внутри метода и внутри блока catch try, как он рекомендует, но затем я не могу разрешить rd-переменную. Я использую пакет acm, поэтому некоторые другие синтаксисы могут выглядеть по-другому, но я не получаю никаких других ошибок. Любая помощь будет высоко оценено =)Ошибка синтаксиса Java буферизированный читатель

import acm.program.*; 
import acm.util.*; 
import java.io.*; 
import java.util.*; 

public class FileReading extends ConsoleProgram { 

BufferedReader rd = new BufferedReader(new FileReader("file.txt")); 

try { 
    while (true) {   
     String line = rd.readLine(); 
     if (line == null) { 
      break; 
     } 
     println(line); 
    } 
    rd.close(); 
} 
catch (IOException ex) { 
    throw new ErrorException(ex); 
    } 
} 
} 
+3

Вы должны поместить этот код внутри метода! .. – SuperSaiyan

+0

@Jarod: Возможно, если вы ставите статическую переменную 'rd', но это может противоречить дизайну, если' rd' должен быть отдельным 'Reader' для каждого созданного объекта FileReading. – nhahtdh

ответ

3

Блоки кода, как это должно быть реализовано внутри метода или статического пункта. Что-то вроде:

public class FileReading extends ConsoleProgram { 

    public void readFile(){ 
    BufferedReader rd = null; 
    try { 
     rd = new BufferedReader(new FileReader("file.txt")); 
     while (true) {   
      String line = rd.readLine(); 
      if (line == null) { 
       break; 
      } 
      println(line); 
     } 
    }catch (IOException ex) { 
     throw new ErrorException(ex); 
    }finally{ 
     try{ 
     rd.close(); 
     }catch (IOException ex) { 
     throw new ErrorException(ex); 
     } 
    } 
    } 
} 
+0

Я пробовал это раньше, но я все еще получаю эту ошибку, когда я это делаю: Необработанный тип исключения FileNotFoundException, относящийся к новому FileReader («file.txt»), в котором он рекомендует добавлять объявление throws или окружать с помощью try/catch. Try/catch оставляет rd undefined ниже и добавляет следующее: public void readFile() throws FileNotFoundException {будет запускать его, но он создает пустой вывод. Я проверил, что файл находится в папке проекта, именован правильно, и что у него есть текст для отображения. – Jarod

+0

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

+0

И посмотрите мое редактирование для улучшенного ответа (что касается ошибки области catch catch) – GETah

1

Как ответили другие, вы не можете предоставить свой код в общей части класса, она должна быть в пределах метода или статический блок.

Поместив блок кода в конструктор, проблема исчезла. См. Ниже, например.

import acm.program.*; 
import acm.util.*; 
import java.io.*; 
import java.util.*; 

public class FileReading extends ConsoleProgram { 
public FileReading() 
{ 
BufferedReader rd = new BufferedReader(new FileReader("file.txt")); 

try { 
    while (true) {   
     String line = rd.readLine(); 
     if (line == null) { 
      break; 
     } 
     println(line); 
    } 
    rd.close(); 
} 
catch (IOException ex) { 
    throw new ErrorException(ex); 
    } 
} 
} 
} 
0

Создать метод ... и внутри, что это делать ... Не прямо внутри класса

например:

public void go() 
{ 

    BufferedReader rd = new BufferedReader(new FileReader("file.txt")); 

try { 
    while (true) {   
     String line = rd.readLine(); 
     if (line == null) { 
      break; 
     } 
     println(line); 
    } 
    rd.close(); 
} 
catch (IOException ex) { 
    throw new ErrorException(ex); 
    } 
} 

} 

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

  • Нет связанных вопросов^_^