2013-08-27 56 views
0

在我的方法,下面的伪代码,在一行中创建两个异常(ArrayIndexOutOfBounds和NumberFormatException)的行上。错误的catch块运行

在此行上,输入文件从X + Y列更改为X列。

外部捕获是先捕获并在内部捕获可以自行完成之前停止程序。

我需要内部循环捕捉异常,因为我使用它将数据打印到文件中。

try{ 
    Initialize local variables 
    //Includes getting numerical strings from input fields 
    //Hence NumberFormatException to check for correct input 
    try{ 
     get file name 
     //hence FileNotFoundException 
     try{ 
      read line, get column A, B and C 
      //Column B is at an index larger than X 
      //hence ArrayIndexOutOfBoundsException 
     }catch(ArrayIndexOutOfBoundsException){ 
      print data to file 
     } 
    } catch(FileNotFoundException){ 
     error message 
    } 
} catch(NumberFormatException){ 
    error message 
    //error caught here, checks for whether 
    //numbers were entered in the required fields 
} 

有没有办法迫使内部catch首先触发或代码需要重新工作呢?

+2

如何获取文件名导致'NumberFormatException'? – Maroun

+0

哦爆炸,我想我可以简化它到它的裸骨,但我不会混淆答案。我将编辑该问题。 – user2659937

+0

可能会在外部try-catch块中抛出异常。在out catch块中打印异常的堆栈跟踪以获得发生异常的extact行号 – AJJ

回答

4

尝试在内部块中捕捉更一般的异常。 如果捕获的异常是instanceof NumberFormatException,则将其传递到外部块或在那里返回错误消息。

+0

异常是正确的。在无异常运行的代码的最后一行和生成异常的行之间,列数(Parsed CSV)减少,以保证B大于数组的长度。 – user2659937

0

问题是正在读取的csv文件有额外的逗号来阻止文件锯齿;这是我依靠打印归档的想法。

预期投入的例外情况是正确的,但现在我在追赶这个额外的可能性的inntermost渔获物中捕获了NumberFormatExceptionIndexOutOfBoundsException