Jen*_*ith 87 java file fileoutputstream
我正在尝试删除一个文件,在写完文件后,用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();
}
}
Run Code Online (Sandbox Code Playgroud)
如图所示,我刷新并关闭流,但是当我尝试删除时,file.delete()
返回false.
我删除前检查,看看是否该文件存在,并且:file.exists()
,file.canRead()
,file.canWrite()
,file.canExecute()
所有返回true.在调用这些方法后,我尝试file.delete()
返回false.
有什么我做错了吗?
小智 97
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Jen*_*ith 46
这个诀窍很奇怪.事情是我以前读过文件的内容,我用过BufferedReader
.读完后,我关闭了缓冲区.
同时我换了,现在我正在阅读内容FileInputStream
.完成阅读后,我关闭了流.现在它正在发挥作用.
问题是我对此没有解释.
我不知道BufferedReader
也FileOutputStream
不相容.
Kis*_*nha 18
我尝试过这个简单的事情似乎很有效.
file.setWritable(true);
file.delete();
Run Code Online (Sandbox Code Playgroud)
这个对我有用.
如果这不起作用,请尝试使用sudo运行Java应用程序(如果在Linux上)和管理员运行Windows时.只是为了确保Java有权更改文件属性.
小智 5
在尝试删除/重命名任何文件之前,必须确保所有读者或编写者(例如:BufferedReader
/ InputStreamReader
/ BufferedWriter
)都已正确关闭.
当您尝试从/向文件读取/写入数据时,该文件由进程保留,并且在程序执行完成之前不会释放.如果要在程序结束之前执行删除/重命名操作,则必须使用类close()
附带的方法java.io.*
.