删除 JComboBox 中的文件
Deleting file inside JComboBox
我有一个 JComboBox,里面装满了一些 java.io.File
对象。通过在 ComboBox 中选择这些文件之一,我想从 ComboBox 和文件系统中删除它。
代码片段:
deleteButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int dialogButton = JOptionPane.YES_NO_OPTION;
int dialogResult = JOptionPane.showConfirmDialog(null, "Are you sure?", "Warning", dialogButton);
if (dialogResult == JOptionPane.YES_OPTION)
{
Path path = Paths.get(mailingLists.getSelectedItem().toString());
mailingLists.removeItem(mailingLists.getSelectedItem());
try
{
Files.delete(path);
JOptionPane.showMessageDialog(null, "File deleted!", "SUCCESS", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e1)
{
JOptionPane.showMessageDialog(null, e1.toString(), "ERROR", JOptionPane.ERROR_MESSAGE);
e1.printStackTrace();
}
}
}
});
它给出了这个异常:java.nio.file.FileSystemException [...] file already in use
这是因为它被我的应用程序使用,然后我想先从 ComboBox 中删除它,然后使用 Files.delete(path);
删除它,但仍然有异常。
怎么了?
P.S.
是我第一次处理这种情况,所以我想用 File f = new File("path"); f.delete();
代替 Files.delete(path);
是否更好。
编辑:提供了有关 JComboBox 加载的更多信息。
从头开始:
LinkedList<File> listFolder = new LinkedList<File>();
listFolder.add(new File("mailinglists"));//<--- root folder
File[] stuffInFolder = listFolder.get(0).listFiles();
JComboBox<File> mailingLists = new JComboBox<File>(stuffInFolder);
听起来您需要关闭该文件。
当您打开一个文件时,OS 将阻止文件被删除,直到与该文件的连接关闭。
我会建议,而不是 JComboBox
填充一些 java.io.File
对象使用路径为字符串的文件名。当您必须删除文件时,使用路径创建一个 File
的对象并将其删除。
使用Java.io.File.delete()
try
{
File f = new File(path);
if(f.delete())
JOptionPane.showMessageDialog(null, "File Deleted Succesfully!");
else
JOptionPane.showMessageDialog(null, "File couldn't be deleted!");
}
已解决!
我使用的是同事开发的 "bugged" 外部库。它的目标是读取 .properties 文件。读取后,文件仍处于打开状态。
已修复,现在一切正常。
我有一个 JComboBox,里面装满了一些 java.io.File
对象。通过在 ComboBox 中选择这些文件之一,我想从 ComboBox 和文件系统中删除它。
代码片段:
deleteButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int dialogButton = JOptionPane.YES_NO_OPTION;
int dialogResult = JOptionPane.showConfirmDialog(null, "Are you sure?", "Warning", dialogButton);
if (dialogResult == JOptionPane.YES_OPTION)
{
Path path = Paths.get(mailingLists.getSelectedItem().toString());
mailingLists.removeItem(mailingLists.getSelectedItem());
try
{
Files.delete(path);
JOptionPane.showMessageDialog(null, "File deleted!", "SUCCESS", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e1)
{
JOptionPane.showMessageDialog(null, e1.toString(), "ERROR", JOptionPane.ERROR_MESSAGE);
e1.printStackTrace();
}
}
}
});
它给出了这个异常:java.nio.file.FileSystemException [...] file already in use
这是因为它被我的应用程序使用,然后我想先从 ComboBox 中删除它,然后使用 Files.delete(path);
删除它,但仍然有异常。
怎么了?
P.S.
是我第一次处理这种情况,所以我想用 File f = new File("path"); f.delete();
代替 Files.delete(path);
是否更好。
编辑:提供了有关 JComboBox 加载的更多信息。
从头开始:
LinkedList<File> listFolder = new LinkedList<File>();
listFolder.add(new File("mailinglists"));//<--- root folder
File[] stuffInFolder = listFolder.get(0).listFiles();
JComboBox<File> mailingLists = new JComboBox<File>(stuffInFolder);
听起来您需要关闭该文件。 当您打开一个文件时,OS 将阻止文件被删除,直到与该文件的连接关闭。
我会建议,而不是 JComboBox
填充一些 java.io.File
对象使用路径为字符串的文件名。当您必须删除文件时,使用路径创建一个 File
的对象并将其删除。
使用Java.io.File.delete()
try
{
File f = new File(path);
if(f.delete())
JOptionPane.showMessageDialog(null, "File Deleted Succesfully!");
else
JOptionPane.showMessageDialog(null, "File couldn't be deleted!");
}
已解决!
我使用的是同事开发的 "bugged" 外部库。它的目标是读取 .properties 文件。读取后,文件仍处于打开状态。
已修复,现在一切正常。