浏览 2697 次
锁定老帖子 主题:java拷贝文件问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2015-05-27
所以我的想法是先写到本地目录,再拷贝到约定的目录,但是拷贝文件时还是会存在时间差,就是拷贝开始到拷贝结束,如果时间较长(比起写文件并压缩会短一点),仍然存在文件还没写完就被取走的情况 想问的是:java复制文件,有没有什么方式,把整个文件都复制完毕,再出现在目标目录下,我试过BufferedOutputStream和FileChannel复制文件,都不能做到这种场景,求大侠指导!谢谢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2015-05-29
好像没有好吧!
不过你可以间隔一段时间读相同的目录,如果目录下文件的大小没有变的话,应该是写完了。这个时候就可以拷贝。 |
|
返回顶楼 | |
发表时间:2015-05-31
其实你写与不写,不是直接让另外的程序直接copy走,而是应该写完后,在那个目录生成个记录表,让另外的程序去根据记录表做操作。
|
|
返回顶楼 | |
发表时间:2015-06-02
可以考虑这样做,分两种文件后缀名,如:*.a,*.b,即没写完的文件和可以取走的文件,当写完后立刻把文件后缀名改为*.b,定时任务只管遍历*.b文件
|
|
返回顶楼 | |
发表时间:2015-06-02
为什么不用控制文件呢?
我们做BI这是最常见的场景,一端程序给一个目录写,另一端程序从目录读,写程序把文件写完后,生成一个控制文件xxx.ctl文件,内容包括数据文件的名字、位置、大小等信息。读程序从目录里拿到控制文件xxx.ctl,从控制文件中获取数据文件,再读取数据文件。 这样就不会有写程序没写完,读程序就开始读的问题了。 |
|
返回顶楼 | |
发表时间:2015-06-02
读程序把数据文件读完之后,把目录下的控制文件和数据文件一并挪到另一个目录下备份,一方面避免造成约定的公共目录越来越大,读写慢,另一方面备份的数据可以用作异常恢复和任务重跑。
|
|
返回顶楼 | |