如何摆脱try / catch块的IOException catch上的IntelliJ警告/错误?

时间:2019-02-17 19:18:29

标签: java intellij-idea file-io try-catch warnings

对不起。我确定这已经在这里的某个地方得到了解答。但是,我找不到它。

从本质上讲,无论我做什么,我都有一个try / catch块,在这里我似乎会收到警告或错误。 catch(IOException e)导致“范围太广”的警告。 catch (FileNotFoundException e)导致需要IOException捕获的代码出错。 catch (FileNotFoundException | IOException e)导致“多重捕获中的类型必须不相交”错误。最后,放置两个catch块(每个异常一个)会导致“ catch”分支与“ FileNotFoundException'相同”警告。

我不想编辑IntelliJ的警告系统,因为它很有用。

如何使下面的try / catch块正常工作而没有警告或错误?

@Override
public void readFile(File inFile) {

try {
    FileReader fr = new FileReader(inFile);
    BufferedReader br = new BufferedReader(fr);

    // get the line with the sizes of the puzzle on it
    String sizes = br.readLine();

    // find the height of the puzzle
    int height = Character.getNumericValue(sizes.charAt(0));

    // create a puzzleArr with a height
    this.puzzleArr = new char[height][];

    // create the char[] array of the puzzle itself
    int ct = 0;
    String puzzleLine;

    // add the puzzle to puzzleArr
    while (ct < this.puzzleArr.length) {

        puzzleLine = br.readLine().replaceAll("[^a-z]", "");
        this.puzzleArr[ct++] = puzzleLine.toCharArray();
    }

    // create the LinkedList<char[]> of words to find in the puzzle
    String line = br.readLine();
    while (line != null) {

        line = line.toLowerCase().replaceAll("[^a-z]", "");
        this.wordList.add(line.toCharArray());

        line = br.readLine();
    }

    br.close();

} catch (FileNotFoundException e) {

    e.printStackTrace();
}
}

2 个答案:

答案 0 :(得分:3)

您可以在Settings > Editor > Inspections > Java > Error Handling > Overly broad 'catch' block找到相应的检查。我想指出,默认情况下我没有启用此检查。

有几种方法可以“修复”警告。

使用多重捕获

@Override
public void readFile(File file) {

    try {
        ...
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

}

修改检查

这可能是首选选项,尤其是在您要避免完全禁用检查的情况下。根据检查说明:

  

报告 catch 块,这些块的参数比相应的 try 块引发的异常更通用。

     

使用下面的第一个复选框,使此检查仅针对最通用的异常发出警告。

     

使用下面的第二个复选框忽略所有隐藏其他异常的异常,但是这些异常可能会被抛出,因此从技术上讲并不太广泛。

最后一段是我们感兴趣的。

enter image description here

答案 1 :(得分:-4)

尝试catch (Exception e){}应该有效