2013-05-19 2 views
1

У меня есть назначение, где мне нужно написать блок кода цикла while, содержащий оператор try­catch. Блок try извлекает каждую строку из входного файла и вызывает метод isValid, который я создал, чтобы проверить правильность формата, передав ему строку из файла. Если линий для синтаксиса больше нет, runProgram устанавливается в false, цикл while завершается. Блок catch поймает исключение, которое я сделал. До сих пор яОшибка ловить и файл IO

public static void main(String[] args) 
    { 
    File file; 
    Scanner inputFile; 
    String fileName; 

    Scanner scan = new Scanner(file); 
    fileName = scan.nextLine(); 

    boolean runProgram = true; 
    while(runProgram) 
    { 
     try 
     { 
      // for loop to check each line of my file 
      // invoke isValid 
      // Check if it's the last line in the file, and end program if so 
     } 
     catch(BankAccountException e) 
     { 
      System.out.println("Account Exception. Do you wish to quit? y/n"); 
      String quit = scan.nextLine(); 
      if(quit.equals("y")) 
       runProgram = false; 
      else 
       runProgram = true; 
     } 
    } 
    } 

Я просто понятия не имею, как открыть файл, проверьте следующую строку, используйте мой isValid метод (который является только StringTokenizer, который проверяет корректность формата), и закрывается, когда она достигает конец файла.

Вот мой isValid метод:

private static boolean isValid(String accountLine) throws BankAccountException 
    { 
     StringTokenizer strTok = new StringTokenizer(accountLine, ";"); 
     boolean valid = true; 
     if(strTok.countTokens() == 2) 
     { 
     if(strTok.nextToken().length() == 10) 
     { 
      if(!strTok.nextToken().matches(".*[0-9].*")) 
      { 
       valid = true; 
      } 
     } 
     } 
     else 
     valid = false; 
     return valid; 
    } 

У меня тоже есть вопрос с описанным выше способом. Если я позвоню .nextToken() два раза, я прав, ожидая, что первая итерация будет работать с первым токеном, а вторая - со вторым? Или они оба просто проведут первый токен?

+0

Посмотрите на [File] (http://docs.oracle.com/javase/6/docs/api/java/io/File.html), [FileReader] (http://docs.oracle .com/javase/6/docs/api/java/io/FileReader.html) и [BufferedReader] (http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html) , Они должны уметь добиваться того, чего вы хотите. В противном случае исследуйте пакет IO. Полезно также [учебник] (http://docs.oracle.com/javase/tutorial/essential/io/). – BevynQ

ответ

0

Просто, чтобы вы начали.

try { 
    BufferedReader reader = new BufferedReader(new FileReader(new File("/path/to/File"))); 
    String currLine; 
    while ((currLine = reader.readLine()) != null) { // returns null at EOF 
     if (!isValid(currLine)) throw new BankAccountException(); 
    } 
} catch (BankAccountException e) { 
    // same 
} finally { 
    reader.close(); 
}