我正在尝试执行下面的代码。但我得到编译时错误。我写了下面的代码来显示文件" myfile.txt"的内容。 但实际上没有文件" myfile.txt"。然后是异常" FileNotFound"应该在运行时抛出。但是下面的程序没有编译。
代码:
import java.io.*;
class rethrow {
public static void main(String args[]) {
rethrow rt = new rethrow();
try {
rt.m1();
} catch (FileNotFoundException FNFE) {
FNFE.printStackTrace();
}
}
void m1() {
try {
FileInputStream fin = new FileInputStream("myfile.txt");
System.out.println("file contents");
int ch;
while ((ch = fin.read()) != -1)
System.out.println((char) ch);
fin.close();
} catch (FileNotFoundException FNFE) {
FNFE.printStackTrace();
throw FNFE;
} catch (IOException IOE) {
IOE.printStackTrace();
}
}
}
---------------------------`------------------- -------- OUT PUT:
rethrow.java:11: exception java.io.FileNotFoundException is never thrown in bod
y of corresponding try statement
catch(FileNotFoundException FNFE)
^
rethrow.java:30: unreported exception java.io.FileNotFoundException; must be ca
ught or declared to be thrown
throw FNFE;
^
2 errors
答案 0 :(得分:2)
你必须在方法./configure && make
中添加throws子句:
m1
否则您的 void m1() throws FileNotFoundException {
方法中有无法访问的FileNotFoundException的阻止块,方法main
中的未处理的异常类型FileNotFoundException 。
在更改中无需捕获m1中的异常。
答案 1 :(得分:0)
将您的方法声明为以下
void m1() throws FileNotFoundException
{
try
{
FileInputStream fin=new FileInputStream("myfile.txt");
System.out.println("file contents");
int ch;
while((ch=fin.read())!= -1)
{
System.out.println((char)ch);
}
fin.close();
}
catch(FileNotFoundException FNFE)
{
FNFE.printStackTrace();
throw FNFE;
}
catch(IOException IOE)
{
IOE.printStackTrace();
}
}
您应该声明您的方法向调用方法抛出的异常类型。