未报告的异常必须被捕获或声明被抛出

时间:2012-12-22 00:09:29

标签: java

  

可能重复:
  Why do I get “Exception; must be caught or declared to be thrown” when I try to compile my Java code?

感谢你解决我的第一个问题,我现在收到一个新的错误

import java.io.*;
import javax.swing.*;

public class FileBrowser {
    public static void main(String[] args) throws IOException {

        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        String filename = file.getName();
        System.out.println("You have selected: " + filename);

        FileReader fr = new FileReader("filename"); 
        BufferedReader br = new BufferedReader(fr); 
        String s; 
        while((s = br.readLine()) != null) { 
            System.out.println(s); 
        } 
        fr.close(); 
    }
}

错误:

java.io.FileNotFoundException: filename (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:97)
    at java.io.FileReader.<init>(FileReader.java:58)
    at FileBrowser.main(FileBrowser.java:13)

是从文件浏览器中无法正确获取文件名的错误吗?

3 个答案:

答案 0 :(得分:9)

Java中有检查和未检查的异常。必须声明您的方法抛出的已检查异常。 FileReader constructor可以抛出FileNotFoundException,这是一个经过检查的例外。代码中的其他一些方法调用也可以抛出已检查的异常。

如果调用一个可以抛出已检查异常的方法,那么您需要捕获异常并处理它或声明您的方法抛出此异常。即使您认为永远不会抛出异常,您也必须执行其中一项操作。不这样做是编译错误。

添加throws

public static void main(String[] args) throws IOException {

或使用try / catch块包围代码:

try {
    // ...
} catch (IOException e) {
    e.printStackTrace();
    // Or ask the user for a different filename...
}

答案 1 :(得分:1)

环绕FileReader fr = new FileReader("filename");尝试并捕获如下:

try {
     FileReader fr = new FileReader("filename"); 
} catch (Exception e) {
    System.out.println("Error: " + e);
}

答案 2 :(得分:0)

除了 Adel Boutrons和Mark Byers 的答案。你还需要做一些改变。

首先,您正在选择文件选择器,因此您还需要

   String path = file.getAbsolutePath();

这将给出文件的绝对路径,包括文件名。

   FileReader fr = new FileReader("filename"); 

这里你没有提供任何文件名,只是字符串,删除“文件名”。

    FileReader fr = new FileReader(path.replace("\\", File.separator)); 

如果找不到文件,则会抛出FileNotFoundException。

相关问题