尝试使用 FileDialog 捕获异常

Trying to catch an Exception using FileDialog

我是 Java 的新手,我在 GUI 中创建了一个小的 table,我想从中打开一个 .txt 文件,以便用文件的内容填充 table内容。我试图从我老师的一个例子中复制代码,但到目前为止我还没有做到 "catch an exception"。这是我的代码:

buddyLoadFile.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                FileDialog fd = new FileDialog(HauptFenster.this,
                                "Open File", FileDialog.LOAD);
                fd.setDirectory(".");
                fd.setVisible(true);
                try {
                    String filename = fd.getDirectory()
                            + fd.getFile();
                    buddyFileManager = new BuddyFileManager(filename);
                    buddyTableModel.setBuddies(buddyFileManager.load());
                    buddyTableModel.fireTableDataChanged();
                }
                catch (IOException ex) {
                    JOptionPane.showMessageDialog(
                            HauptFenster.this,
                            "error loading file", "Error",
                            JOptionPane.ERROR_MESSAGE);
                }
                catch (Exception ex) {
                    JOptionPane.showMessageDialog(
                            HauptFenster.this,
                            "invalid format of file.",
                            "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        });

无论我打开什么类型的文件,程序都会成功地用打开的文件中的字符串填充 table。我使用的代码是否有可能出现异常?

这是我的 FileManager(以备不时之需):

public BuddyFileManager(String filename) {
        fileName = filename;
    }

    public List<Buddies> load() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        StreamTokenizer strTokenizer = new StreamTokenizer(br);
        strTokenizer.whitespaceChars(',', ',');
        List<Buddies> buddyListe = new ArrayList<Buddies>();

        while (strTokenizer.nextToken() != StreamTokenizer.TT_EOF) {
            Buddies buddy = new Buddies();
            buddy.setName(strTokenizer.sval);
            strTokenizer.nextToken();
            buddy.setAlter(strTokenizer.nval);
            strTokenizer.nextToken();
            buddy.setLuegenindex(strTokenizer.nval);
            buddyListe.add(buddy);
        }
        br.close();
        return buddyListe;
    }

非常感谢。

好吧,在您的情况下,您可能会从以下以及更多方面获得 IO 异常。

  • 您正在阅读的 .txt 文件不可用。
  • 一些进程关闭了您使用缓冲 reader 读取数据的输入流。
  • 如果您尝试读取您没有权限的 .txt 文件。

等而且,如果您尝试读取不受支持的文件格式,您将得到异常。所以对于

Is there any chance i will ever get an Exception with the code i am using?

对此答案是。您的代码可能会出现异常 using.If 以上事情之一发生在运行时,您将得到一个异常。它们将由 catch 块处理。

这与问题无关,但您可能需要更改 BuddyFileManager 构造函数代码以避免歧义。(在您的情况下,变量文件名存在歧义)

public BuddyFileManager(String filename) {
        this.fileName = filename;
    }

此关键字通过定义 this.filename 引用 BuddyFileManager class 中的文件名属性,清楚地解决了这种歧义。