为什么使用另一个按钮后文件没有被删除

时间:2018-06-29 01:31:12

标签: java file exception-handling

我正在编辑。我也发现使用其他按钮后无法将其删除,因为它会抛出java.nio.file.FileSystemException:2018 June June 30 09hr19min37sec.txt:该进程无权访问该文件,因为它是第二个按钮的哪个代码部分导致系统继续读取或访问文件,因此第一个要删除的按钮无法删除文件? 我有一个按钮,可从组合框中删除选定的文件,还有一个按钮,可显示当月利润。问题是,当我单击borrar(删除)按钮时,它会正确删除所选文件,但是当我单击Ventas del mes(月获利)按钮,然后又想单击borrar(删除)按钮时,它不会从组合框中删除选定的文件。仅在单击月获利按钮后每次单击删除按钮时才会发生这种情况。如何解决此问题?

Set<String> results = new HashSet<String>();
Set<String> Año = new HashSet<String>();
Set<String> Mes = new HashSet<String>();
Set<String> Dia = new HashSet<String>();
Set<String> textos = new HashSet<String>();
String[] meses = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre",};
Set<String> meses1 = new HashSet<String>();
File[] files = new File("C:\\Users\\SATELITE\\Documents\\NetBeansProjects\\Restaurante").listFiles();
   public Recibos() {
    initComponents();

    for (File file : files) {
        for (int i = 0; i < meses.length; i++) {
            if (file.getName().contains(meses[i])) {
                meses1.add(meses[i]);
            }
        }
        if (file.isFile()) {
            if (file.getName().contains(".txt")) {
                results.add(file.getName());
            }
        }
    }
    DefaultComboBoxModel DefaultComboBoxModel2 = new DefaultComboBoxModel(meses1.toArray());
    cbMes.setModel(DefaultComboBoxModel2);
}

然后我有第一个按钮

private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    txtMostrar.setText("");
    results.clear();
    System.out.println(results);
    String text = cbRecibo.getSelectedItem().toString();
    File[] files = new File("C:\\Users\\SATELITE\\Documents\\NetBeansProjects\\Restaurante").listFiles();
    for (File file : files) {
        if (file.isFile()) {
            if (file.getName().equals(text)) {
                Path p1 = Paths.get(text);
                try {
                    java.nio.file.Files.deleteIfExists(p1);
                } catch (IOException ex) {
                    Logger.getLogger(Recibos.class.getName()).log(Level.SEVERE, null, ex);
                }
                System.out.println(file + "xd1");
            }
        }
    }
    System.out.println(results+"results");
    File[] files2 = new File("C:\\Users\\SATELITE\\Documents\\NetBeansProjects\\Restaurante").listFiles();
    for (File file : files2) {
        if (file.isFile()) {
            if (file.getName().contains(".txt")) {
                System.out.println(file + "xd2");
                results.add(file.getName());
            }
        }
    }
    System.out.println(results);
    cbRecibo.removeAll();
    DefaultComboBoxModel DefaultComboBoxModel1 = new DefaultComboBoxModel(results.toArray());
    cbRecibo.setModel(DefaultComboBoxModel1);
}

第二个按钮单击后会导致第一个按钮没有像应有的那样删除。

private void btnVentasMesActionPerformed(java.awt.event.ActionEvent evt) {                                             
    suma = 0;
    List<String> list = new ArrayList<String>();
    Iterator<String> iterator = results.iterator();

    while (iterator.hasNext()) {
        String setElement = iterator.next();

        File file = new File(setElement);
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            String text = null;

            while ((text = reader.readLine()) != null) {
                if (text.contains("Total")) {
                    list.add(text);
                }
            }
        } catch (Exception e) {
        }

    }


    //good way:
    Iterator<String> iterator2 = list.iterator();
    while (iterator2.hasNext()) {
        String setElement = iterator2.next();
        String numberOnly = setElement.replaceAll("[A-Z,a-z,:]", "");
        suma = suma + Double.parseDouble(numberOnly);


    }

    String totalDeVentas = "La venta total del mes de " + cbMes.getSelectedItem().toString() + "\n fue de :" + suma;
    txtMostrar.setText(totalDeVentas);

}  

2 个答案:

答案 0 :(得分:3)

更改为

if (file.getName().equals(text)) {
     file.delete();
}

但是您似乎也在吞咽任何错误

 } catch (Exception e) {
 }

更改为

 } catch (Exception e) {
      e.printStackTrace();
 }

答案 1 :(得分:-1)

我已经解决了。我没有关闭该阅读器

reader = new BufferedReader(new FileReader(file));
reader.close();

谢谢您的帮助。