2015-04-07 4 views
-1

для программы, которую я назначил, мы должны прочитать из текстового файла, создать ArrayList объектов с именем NameInformation, который содержит информацию из файла, а затем запросить у пользователя имя и пол (гендер является одной из переменных в классе NameInformation), и компьютер расскажет, сколько мальчиков или девочек получили данное имя.Попробуйте/поймать блоки в Java

Доступ к файлам и их использование за пределами блока catch try? Я хочу попробовать что-то вроде этого:

try { 
    FileReader inFile = new FileReader (FILE_NAME); 
} catch (FileNotFoundException e) { 
    System.out.println ("The file " + FILE_NAME + " does not exist"); 
    System.exit(-1); 
} 

Scanner file = new Scanner (infile); 
ArrayList<NameInformation> nameList = new ArrayList<NameInformation>(); 

Я пробовал вышеуказанный код и получал сообщение об ошибке. Единственный способ, которым я мог заставить его работать, - сделать попытку массивной. Это единственный способ сделать это? Я чувствую, что массивный блок try неверен.

Я хочу добавить элементы в ArrayList тоже, но, похоже, не может быть прав.

while (file.hasNextLine()) { 
    NameInformation babyName = new NameInformation(file.nextLine()); 
    nameList.add(babyName); 
} 

Но это не совсем то, что я хочу.

+1

«Быстрое исправление» будет «FileReader inFile = null; try {infile = ....} catch (...) {...} Файл сканера = новый сканер (inFile); .... '. Переместите переменную 'inFile' за пределы блока' try/catch', чтобы увеличить ее область. Также обратите внимание на опечатку в 'new Scanner (infile)', вы ошибочно указали свою переменную. – Tom

+0

Если блок try является «массивным», это просто означает, что у вас слишком много строк кода внутри блока. Рефактор для введения методов: 'try {List list = readInformationFrom (inFile); } ' –

+0

@ Это быстрое исправление является уродливым. Он работает только потому, что блок catch вызывает System.exit(). Если это не так, быстрое исправление приведет к исключению NullPointerException. –

ответ

0

Вы можете сделать это, как это и дают только ошибку метание код в попытке поймать блока, вы никогда не проходя поймать блок в любом случае, потому что система выходит там, в противном случае вы должны проверить, что файл не является нулевым впоследствии:

FileReader inFile = null; 
try { 
    inFile = new FileReader (FILE_NAME); 
} catch (FileNotFoundException e) { 
    System.out.println ("The file " + FILE_NAME + " does not exist"); 
    System.exit(-1); 
} 

Scanner file = new Scanner (infile); 
ArrayList<NameInformation> nameList = new ArrayList<NameInformation>(); 
0

Инициализация файла должна быть в блоке Try Catch. Но вы должны объявить его вне блока для доступа к нему за пределами. Пример:

FileReader inFile = null; 
try { 
    inFile = new FileReader (FILE_NAME); 
} catch (FileNotFoundException e) { 
    System.out.println ("The file " + FILE_NAME + " does not exist"); 
    System.exit(-1); 
} 

Scanner file = new Scanner (infile); 
ArrayList<NameInformation> nameList = new ArrayList<NameInformation>(); 
Смежные вопросы