我无法弄清楚在使用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++;
}
}
}
答案 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