问题
我正在尝试删除一个文件,在其中写入内容后,使用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()all返回true。在调用这些方法后,我尝试file.delete()并返回false。
有什么我做错了吗?
#1 热门回答(91 赞)
Java中的另一个错误。我很少找到他们,只是我10年职业生涯中的第二个。正如其他人所提到的,这是我的解决方案。我有幽冥二手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();
}
}
#2 热门回答(44 赞)
这个诀窍很奇怪。事情是,当我以前读过文件的内容时,我使用了BufferedReader。读完后,我关闭了缓冲区。
同时我换了,现在我正在阅读内容使用FileInputStream。完成阅读后,我关闭了流。现在它正在发挥作用。
问题是我没有这方面的解释。
我不知道BufferedReader和FileOutputStream是不相容的。
#3 热门回答(16 赞)
我尝试过这个简单的事情,似乎工作正常。
file.setWritable(true);
file.delete();
这个对我有用。
如果这不起作用,请尝试使用sudo运行Java应用程序(如果在Linux上)和管理员运行Windows时。只是为了确保Java有权更改文件属性。