尝试并捕获范围问题

时间:2013-12-01 21:39:09

标签: java try-catch

我无法弄清楚在使用try和catch处理时想要放在什么范围内的东西,我的部分代码要求用户键入他们想要扫描的文件名,这是尝试和catch语句:

try{
    System.out.println("Enter the name of the file you wouldlike to scan: ");
    String fileName = scan.nextLine();

    File file = new File(fileName);
    BufferedReader br = new BufferedReader(new FileReader(fileName)                        }                   
    catch( IOException ioe){
                                System.out.println(ioe);
                                System.exit(-1);
                        }

当我编译它时,在“line = br.readLine();”中找不到符号“br”。 //扫描文件的部分代码,我不知道在try语句的哪个范围放置什么

这里是另一个(不是整个程序)代码的一部分,我用system.in测试了这个部分并且工作正常,但是没有使用filereader

String line;
            int lineCount = 0, wordCount = 0, charCount = 0, palCount = 0;
            int thisLineWords = 0, thisLineChars = 0;
            boolean isPal = true;

            do {
                    try {
                            line = br.readLine();
                    }
                    catch( Exception e ) {
                            break;
                    }

                    if( line == null ) break;


                    if( line.compareTo(".") == 0 ) break;

                    thisLineWords = 0;
                    thisLineChars = line.length() + 1; // count chars
                    isPal = true;

                    //count words
                    boolean inWord = false;
                    for( int i = 0; i < line.length(); i++ ) {
                            char ch = line.charAt(i);
                            if( Character.isWhitespace(ch) ) {
                                    if( inWord ) inWord = false;
                            }
                            else {
                                    if( !inWord ) {
                                            inWord = true;
                                            thisLineWords++;
                                    }
                            }
                    }

4 个答案:

答案 0 :(得分:1)

当你有这样的东西时,我通常做的是以下几点:

 BufferedReader br = null; // here declare the object you want later to use
 try {
      // now the part that could cause the exception
      br = new BufferedReader(new FileReader(fileName)); 
 } catch (IOException ioe) {
      // handle exception
 }


 if (br != null) {
    // now use br outside of try/catch block
 }

当然,这也适用于任何其他可能导致异常的对象,并且在程序的许多地方都需要。

答案 1 :(得分:0)

BufferedReader的范围将仅限于try块。您应该将所有调用放在此块中的BufferedReader上。

答案 2 :(得分:0)

try block中声明的变量的范围以其终止结束。因此,您的案例中的变量'br'无法在try块之外被识别。

我建议,在try块之外声明相应的变量。检查它是否会导致FileNotFoundException中的try block。成功退出try catch block后,

使用相应的变量来获取所需的相应详细信息。

这是它背后的理论逻辑。 Edgar Boda正确地展示了正确的编码机制,以帮助您找到正确的解决方案。阅读这两个答案将有助于您了解为什么首先遇到这个问题。

希望这有帮助。

答案 3 :(得分:-1)

catch块与try块关联。所以你的代码将是

try {
    // read file
    //.....
} catch(IOException e) {
    System.out.println(e);
    System.exit(-1);
}

更多阅读:Oracle tutorial

br移出try块范围。编译器抱怨无法识别br,因为在尝试阻止范围br之后无法看到。 Java Scope