尝试使用FileDialog捕获异常

时间:2018-07-07 20:01:19

标签: java filedialog

我是Java的新手,我在GUI内创建了一个小表,我想从中打开.txt文件,以便用文件的内容填充表。我试图从我的老师的一个示例中复制代码,但是到目前为止,我还没有设法“捕获异常”。这是我的代码:

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);
                }
            }
        });

无论我打开哪种文件,程序都会使用打开的文件中的字符串成功填充表。我有没有机会得到我正在使用的代码的异常?

这是我的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;
    }

非常感谢您。

1 个答案:

答案 0 :(得分:0)

好吧,在您的情况下,您可以从以下内容中获取IO异常,以及更多信息。

  • 您正在读取的.txt文件不可用。
  • 某些进程关闭了使用缓冲读取器读取数据的输入流。
  • 如果您尝试读取未经许可的.txt文件。

等而且,如果您尝试从不支持的文件格式中进行读取,则将获得和异常。所以

  

我是否有机会获得代码异常   使用吗?

为此,答案是。您正在使用的代码可能会出现异常。如果在运行时发生以上情况之一,您将获得异常。它们将由catch块处理。

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

mValue

此关键字通过定义public BuddyFileManager(String filename) { this.fileName = filename; } 引用BuddyFileManager类中的filename属性来清楚地解决此歧义。