在调用FileOutputStream的close方法之后立刻移动或操作文件会遇到文件被占用的问题
来源:互联网 发布:ctf flag.php 编辑:程序博客网 时间:2024/05/26 22:58
在通过FileOutputStream进行文件输出,尤其是文件内容较大的输出完成之后都需要关闭文件,正常情况下都会通过调用close方法关闭输出流。然后在某些特殊情况下,我们需要在关闭输出流之后对文件进行移动或者其他转换之类的操作,而此时你可能会遇到“文件被占用”的错误。这意味着你要操作的文件正在被另一个程序使用。我们既然已经调用了close方法,为何文件依然被占用呢?
因为文件的输出对程序而言并不是实时的,通常为了匹配软件的速度差,内容在被写入物理文件之前通常会被保存在缓存中,然后在逐步写入物理文件,当我们需要写入文件的内容输出完成后只是意味着所有内容已经被部分写入了物理文件,部分内容还位于缓存中,close方法执行完成后,缓存中的内容还在陆续写入物理文件,在这个步骤完成之前,文件依然处于被程序占用的状态,所以close方法调用之后并不能立刻对文件进行操作。那么怎么办呢?
很简单,就是等到缓存中的内容全部写入物理文件之后再进行操作。如何等到内容全部写完呢?通过FileOutputStream的对象调用getFD()方法得到一个FileDescriptor的对象,然后调用该对象中的sync方法就表示等待所有内容同步到物理文件的过程。示例代码如下:
FileOutputStream out = new FileOutputStream(....);
while(....) {
out.write(....);
}
out.close();
out.getFD().sync();
move file...
1 0
- 在调用FileOutputStream的close方法之后立刻移动或操作文件会遇到文件被占用的问题
- 被PrintStream包装的FileOutputStream在PrintStream调用close()后是否需要单独调用自己的close()方法关闭
- 关于在用struts2上传文件之后,会产生临时文件的问题
- 文件操作的系统调用之write ,close, lseek
- 对文件的操作,FileInputStream,FileOutputStream
- C#调用WPS操作Excel文件遇到的问题
- 判断文件是否被占用的方法
- 用FileOutPutStream写流文件的有效方法
- 在操作文件时遇到的乱码问题
- 视图移动添加等操作会调用的方法
- 在PHP增删改查里面遇到的SUBMIT表单之后的文件跳转问题
- 文件的基本操作---复制/移动或删除文件
- 操作svg文件会用到的方法
- 快速操作(复制,移动)文件的方法
- Excel操作Bug引出的问题:如何判断文件是否被占用、打开
- 莫名的文件被占用
- 文件操作中遇到的问题
- 操作被占用的文件-unlocker机理分析(转)
- Java 基础总结
- 2015年最值得学习的编程语言是?
- 【线段树】[CQBZOJ1906]Hotel
- 特征选择常用算法综述
- jenkins学习心得
- 在调用FileOutputStream的close方法之后立刻移动或操作文件会遇到文件被占用的问题
- In-Situ可视化
- VS编写DLL
- linux kernel learning notes
- JAVA学习第三天
- 数据库的体系结构--三级模式两级映射
- 92 jquey json.parse json.stringify
- Core Data后端SQL的可见性
- 转载自罗博士