【问题标题】:unreported exception must be caught or declared to be thrown [duplicate]必须捕获或声明抛出未报告的异常[重复]
【发布时间】:2012-12-22 00:09:28
【问题描述】:

可能重复:
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)

是没有从文件浏览器正确获取文件名的错误吗?

【问题讨论】:

  • 如果您有新问题,最好创建一个新问题,否则所有旧问题和答案都会与新问题和答案混在一起,并且所有 cmets 都不再有意义。您可能应该将问题恢复到原来的状态,并用您的新问题制​​作一个新问题。
  • 好的,非常感谢,有没有简单的方法可以回复问题?

标签: java


【解决方案1】:

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...
}

【讨论】:

  • 非常感谢你这么详细的回答:)
【解决方案2】:

环绕FileReader fr = new FileReader("filename");使用 try 和 catch 如下:

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

【讨论】:

  • 我刚刚这样做了,但现在出现新错误找不到符号变量 fr
【解决方案3】:

除了 Adel Boutrons 和 Mark Byers 的答案。您还需要进行一些更改。

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

   String path = file.getAbsolutePath();

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

   FileReader fr = new FileReader("filename"); 

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

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

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

【讨论】:

  • 非常感谢 :) 它工作正常,但即使工作正常,我仍然收到错误消息,我应该担心吗?
  • 想通了,谢谢大家的帮助!
  • @user1892955 让我更新答案。
  • @user1892955 只有一个建议。努力学习并尝试自己找到答案,然后你就会学到。
  • 谢谢,你有什么好的教程或方便的网站供刚起步的人使用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多