-1

可能重复:
为什么我得到“异常;当我尝试编译我的 Java 代码时,必须被捕获或声明被抛出?

谢谢家伙解决了我的第一个问题,我现在遇到了一个新错误

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)

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

4

3 回答 3

9

Java中有已检查和未检查的异常。必须声明您的方法抛出的已检查异常。构造FileReader函数可以抛出一个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...
}
于 2012-12-22T00:11:44.673 回答
1

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

try {
     FileReader fr = new FileReader("filename"); 
} catch (Exception e) {
    System.out.println("Error: " + e);
}
于 2012-12-22T00:12:00.570 回答
0

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

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

   String path = file.getAbsolutePath();

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

   FileReader fr = new FileReader("filename"); 

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

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

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

于 2012-12-22T00:24:41.540 回答