一尘不染

即使file.exists(),file.canRead(),file.canWrite(),file.canExecute()都返回true,file.delete()仍返回false

java

我正在尝试用写入文件后删除文件FileOutputStream。这是我用来编写的代码:

private void writeContent(File file, String fileContent) {
    FileOutputStream to;
    try {
        to = new FileOutputStream(file);
        to.write(fileContent.getBytes());
        to.flush();
        to.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我刷新并关闭了流,但是当我尝试删除时,file.delete()返回false

我删除前检查,看看是否该文件存在,并且:file.exists(),file.canRead()file.canWrite()file.canExecute()一切回归真实。在调用这些方法之后,我尝试file.delete()返回false

我做错了什么吗?


阅读 838

收藏
2020-03-09

共2个答案

一尘不染

起作用的把戏很奇怪。事情是,当我以前读取文件的内容时,我使用BufferedReader。阅读后,我关闭了缓冲区。

同时,我切换了语言,现在我正在使用读取内容FileInputStream。同样在完成阅读后,我关闭了流。现在它正在工作。

问题是我没有对此的解释。

我不知道BufferedReader并且FileOutputStream不兼容。

2020-03-09
一尘不染

Java中的另一个错误。我很少找到他们,只有我十年来的第二个。正如其他人所提到的,这是我的解决方案。我曾经用过一点System.gc()。但就我而言,这绝对至关重要。奇怪的?是!

finally
{
    try
    {
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
        System.gc();
    }
    catch (IOException e)
    {
        logger.error(e.getMessage());
        e.printStackTrace();
    }
}
2020-03-09