2015-07-06 38 views
0

我有一个装满了一些java.io.File对象的JComboBox。通过在ComboBox中选择其中一个文件,我想从ComboBox和Filesystem中删除它。删除JComboBox内的文件

代码片段:

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); 
+0

除了从组合框中删除文件之外,你还做过其他什么吗? –

+0

*这是因为它已被我的应用程序使用*您是如何在应用程序中使用该文件的? – Blip

+0

@Binkan Salaryman:无非是试图删除它; – grimi

回答

0

解决了!

我正在使用由同事开发的“窃听”外部库。它的目标是读取.properties文件。一旦通过,文件仍然打开。

固定,现在一切正常。

1

听起来像是你需要关闭该文件。 当您打开文件时,操作系统将阻止文件被删除,直到文件连接关闭。

+0

所以在我的情况下,我应该使用'mailingLists.getSelectedItem()'获得文件,然后关闭它或尝试其他方式? – grimi

+1

您需要获取打开文件的流,然后关闭它:[link](http://stackoverflow.com/questions/10667734/java-file-open-a-file-and-write-to-it) – dinamite

1

我会推荐,而不是JComboBox填充一些java.io.File对象使用文件名与路径作为字符串。而当你不得不删除该文件时,使用该路径创建一个对象File并将其删除。

0

使用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!"); 
} 
+0

您应该使用'if'语句来测试'f.delete()'返回的内容,否则您不知道操作是否成功完成 – MadProgrammer