尝试使用 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 中的文件名属性,清楚地解决了这种歧义。
我是 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 中的文件名属性,清楚地解决了这种歧义。