从文件创建扫描程序时引发FileNotFoundException

时间:2015-09-24 01:26:02

标签: java

我正在尝试显示文件打开对话框,然后创建扫描程序以读取所选文件。当我运行我的代码时,它抛出一个FileNotFoundException,这对我没有意义,因为它在打开文件选择器窗口之前抛出异常。

package files;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class FileManipulations {

    public static void main (String[] args) {
        SwingUtilities.invokeLater(() -> runGUI());
    }

    public static void runGUI () {
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        System.out.println(file.exists());
        Scanner fromFile = new Scanner(file);
    }
}

2 个答案:

答案 0 :(得分:2)

从您的示例代码开始...

import java.io.File;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;

public class FileManipulations {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> runGUI());
    }

    public static void runGUI() {
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        System.out.println(file.exists());
        Scanner fromFile = new Scanner(file);
    }
}

您收到编译错误,因为Scanner(File)可能会抛出FileNotFoundException

您需要catch异常或重新抛出异常,例如......

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;

public class FileManipulations {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> runGUI());
    }

    public static void runGUI() {
        JFileChooser chooser = new JFileChooser();
        switch (chooser.showOpenDialog(null)) {
            case JFileChooser.APPROVE_OPTION:
                File file = chooser.getSelectedFile();
                System.out.println(file.exists());
                try (Scanner fromFile = new Scanner(file)) {
                    while (fromFile.hasNextLine()) {
                        String text = fromFile.nextLine();
                        System.out.println(text);
                    }
                } catch (FileNotFoundException exp) {
                    exp.printStackTrace();
                }
                break;
        }
    }
}

您可能还想查看How to Use File Choosers,并确保检查showOpenDialog的返回结果,以便了解对话框的关闭方式

另外,请查看The try-with-resources Statement,了解有关如何管理资源的更多详细信息

答案 1 :(得分:0)

我认为你的代码有点如下:

scala> for {
     | i <- 0 to 20
     | pow <- scala.math.pow(2, i).toInt
     | rec <- 1/pow
     | } println(pow + "\t" + rec)

好的,现在这很好用。只有当我遇到问题时,我才会在文件选择器中选择一个文件,然后单击取消。发生这种情况时,扫描仪本身不会在&#34; file&#34;中创建为值。一片空白。我建议手动添加一个检查以查看是否选择了任何文件if(file == null)System.out.println(&#34;请选择一个文件&#34;);或抛出自己的例外。如果您不想突然出现nullPointerException,则会弹出。 编辑:正如madProgrammer指出的那样,file.getName()宁愿抛出nullPointerException我试着将它更改为file.exists(),如果没有选择文件,仍然会抛出异常。所以反而可能检查file == null更好。 file.exists()检查这个路径名表示的文件是否存在,但是如果我们从未对它进行初始化,即只是在文件选择器中取消,那么它没有帮助。