Java File.delete()仅在随机时间删除目标文件

Java File.delete()仅在随机时间删除目标文件,java,java-io,Java,Java Io,我试图删除文件夹中的一个文件和文件夹本身,但它只是随机删除文件夹。为什么会这样? 如果我继续捣乱删除按钮,它最终会被删除 private void deleteCourseButtonMouseClicked(java.awt.event.MouseEvent evt) { File dltcycle = new File(C.viewcoursedirectory); System.out.println(dltcycle.getAbsolutePath()); Str

我试图删除文件夹中的一个文件和文件夹本身,但它只是随机删除文件夹。为什么会这样? 如果我继续捣乱删除按钮,它最终会被删除

private void deleteCourseButtonMouseClicked(java.awt.event.MouseEvent evt) {
    File dltcycle = new File(C.viewcoursedirectory);
    System.out.println(dltcycle.getAbsolutePath());
    String[] cycle = dltcycle.list();
    for (int i = 0; i < cycle.length; i++) {
        File dlt = new File(C.viewcoursedirectory + "\\" + cycle[i]);
        System.out.println(C.viewcoursedirectory + "\\" + cycle[i]);
        System.out.println(dlt.getAbsolutePath());
        dlt.delete();
    } 
    dltcycle.delete(); 
 }
private void deleteCourseButtonMouseClicked(java.awt.event.MouseEvent evt){
File dltcycle=新文件(C.viewcoursedirectory);
System.out.println(dltcycle.getAbsolutePath());
字符串[]cycle=dltcycle.list();
对于(int i=0;i
预期结果是一致删除目录中的文件夹。
在捣碎删除按钮后,不是随机的。很抱歉,如果代码块看起来很难看,我真的不知道如何格式化它。我不知道为什么“{”和“}”没有出现在代码块:X中。

造成这种行为的最常见原因是流泄漏。例如,如果您使用FileOutputStream编写一个文件,但不知何故没有关闭它,那么当它的引用被垃圾回收时,它最终将被关闭

检查(如果使用输入流或输出流打开文件)流是否始终关闭。

我建议使用文件。请改为删除(路径)。这个方法抛出一个IOException,这样您就可以看到删除失败的原因,而不仅仅是返回一个无用的布尔值。

您可以通过file.toPath()获取文件的路径(因此,'Path p=dlt.toPath()')


只需捕获并记录异常,查看删除失败的原因

您只能使用
文件#delete
删除空目录。此外,您应该检查
文件#delete
的返回值(一个布尔值,指示是否成功删除)。另外,还有一个很好的库,可以简化文件操作:我创建了它,这样它可以在删除文件夹之前删除文件夹的内容。但即便如此,它也只是偶尔起作用。令人费解的是,它只在某些时候起作用,而不是一直失败。您应该检查
delete
返回的布尔值:如果
false
,删除没有成功(是的,我知道它很糟糕,它应该抛出异常…),您可以同时使用file.delete()和file.deleteOnExit()。是的,其中一个没有正确关闭。