捕获错误和文件IO

时间:2013-05-19 21:40:43

标签: java file-io exception-handling

我有一个分配,我需要编写一个包含try­catch语句的while循环代码块。 try块从输入文件中检索每一行,并调用我创建的isValid方法来检查格式是否正确,从文件中传递给它。如果没有更多要解析的行,runProgram设置为false,则while循环终止。 catch块将捕获我所做的异常。到目前为止我已经

  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(),我是否正确期望第一次迭代处理第一个令牌,第二次处理第二次令牌?或者他们都会检查第一个令牌?

1 个答案:

答案 0 :(得分: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();
}