Java 删除JComboBox中的文件

Java 删除JComboBox中的文件,java,swing,file-io,combobox,Java,Swing,File Io,Combobox,我有一个JComboBox,里面装满了一些java.io.File对象。通过在组合框中选择其中一个文件,我想从组合框和文件系统中删除它 代码段: deleteButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int dialogButton = JOptionPane.YES_NO_OPTION;

我有一个JComboBox,里面装满了一些
java.io.File
对象。通过在组合框中选择其中一个文件,我想从组合框和文件系统中删除它

代码段:

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[…]文件已经在使用中
这是因为我的应用程序正在使用它,然后我想首先从组合框中删除它,然后使用
Files.delete(path)删除它但仍有例外

怎么了

附言

是我第一次在这个上下文中处理,所以我想如果使用
File f=new File(“path”);f、 删除()而不是
文件。删除(路径)

编辑:提供了有关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);
LinkedList listFolder=新建LinkedList();

添加(新文件(“邮件列表”)// 听起来你需要关闭这个文件。
打开文件时,操作系统将阻止删除文件,直到与文件的连接关闭

我建议,不要用
JComboBox
填充一些
java.io.File
对象,而是使用路径为字符串的文件名。当您必须删除文件时,使用路径创建
file
的对象并将其删除。

使用
Java.io.file.delete()

解决了

我使用的是一个同事开发的“被窃听”的外部库。它的目标是读取.properties文件。读取后,该文件仍处于打开状态


已修复,现在一切正常。

除了从组合框中删除文件之外,您还做过其他事情吗?这是因为我的应用程序使用了该文件。您如何在应用程序中使用该文件?@Binkan Salaryman:只不过尝试删除它@布利普:我不相信我的猜测。我认为文件被锁定是因为它仍然在JCobmoBox中。@AndreaGrimandi不,这不是
文件
的工作方式,只是一个文件/路径的抽象表示,直到您实际尝试对其执行操作(如删除),它们之间没有“物理”连接,没有任何东西会阻止您删除它们。例如,您可以使用
File#delete
删除一个文件,然后使用
File
的相同实例,使用
File#createNewFile
创建一个具有相同名称和路径的新文件……因此在我的示例中,我应该使用
mailinglist.getSelectedItem()获取该文件
然后关闭它或尝试其他方法?您需要获取打开文件的流,然后关闭它:[link]()您应该使用
if
语句测试
f.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!");
}