2014-03-13 50 views
0

要处理多个文件的读取和输出,在try catch块中处理异常的最佳方法是什么?在java中读取多个文件的异常捕获

try{ 
    BufferReader br1 = new BufferReader(new InputStreamReader(fileName1)); 
    BufferReader br2 = new BufferReader(new InputStreamReader(fileName2)); 
}catch(FileNotFoundException e){ 
    System.err.println("Not found file " + fileName1); 
    System.err.println("Not found file " + fileName2); 
} 

如果只有一个文件未找到,那么警告消息就不太正确。如果我创建另一个try catch块,那么它可以解决问题,但看起来很尴尬。在这种情况下最好的方法是什么?谢谢。

+1

单独的try catch块应该可以工作。这不是尴尬。我认为这没关系。但取决于个人编码的“品味”。否则,做出返回读者的单独方法。或者单独的方法来检查文件是否存在。或者检查相同的方法并抛出异常,如果找不到文件。请记得关闭最后的块 – RuntimeException

+0

中的读者fileName1,fileName2的类型是什么? – hmashlah

回答

2

创建一个createBufferedReader(String fileName)方法,那么你就不会有这个问题。

样品:

private BufferReader createBufferedReader(String fileName) { 
    BufferReader br = null; 
    try { 
    br = new BufferReader(new FileReader(fileName)); 
    return br; 
    } catch(FileNotFoundException e) { 
     System.err.println("Not found file" + fileName); 
    } 
    return null; 
} 
+0

我不太喜欢这个,因为即使它做了肮脏的工作,在方法中包装一个功能应该意味着方法成功或抛出异常失败。它不应打印到stderr。 – gd1

+0

好的方法,但我宁愿传播异常,以便最外层可以相应地对待它。 – Mauren

+1

抛出FileNotFoundException将是没有帮助,因为那时我们再次有原始问题。重点是他/她应该把这两个try-catch块分开,不要多,也不能少。 – gd1

0

我想创建一个辅助方法来创建一个BufferedReader,并调用它的两倍。

0

我觉得仅仅分开两个try - catch块是明智的,不多不少。

由Nappa提供的解决方案Saiyan完成其肮脏的工作,但是在方法中包装一段功能应该意味着方法成功或者抛出异常失败。它不得打印到stderr。在包装方法中再次抛出异常将再次提供原始问题。

真的,请分开try - catch块。如果你有n > 2文件名,只需在一个文件名数组上写一个for循环,然后自定义错误信息,以便输出无法读取的文件的编号。那么你将有一个try - catch