删除 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 文件。读取后,文件仍处于打开状态。

已修复,现在一切正常。