论坛首页 Java企业应用论坛

java拷贝文件问题

浏览 2697 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2015-05-27  
    场景如下:向某个约定的目录写文件并压缩,另一个系统定时来这个目录取文件,取到文件就取走,之后定时来取时同名的不会再取,这时有个问题----如果文件比较大,写到一半时可能就被另一个系统取走,造成取到的文件不完整。

       所以我的想法是先写到本地目录,再拷贝到约定的目录,但是拷贝文件时还是会存在时间差,就是拷贝开始到拷贝结束,如果时间较长(比起写文件并压缩会短一点),仍然存在文件还没写完就被取走的情况

       想问的是:java复制文件,有没有什么方式,把整个文件都复制完毕,再出现在目标目录下,我试过BufferedOutputStream和FileChannel复制文件,都不能做到这种场景,求大侠指导!谢谢
   发表时间:2015-05-29  
好像没有好吧!
不过你可以间隔一段时间读相同的目录,如果目录下文件的大小没有变的话,应该是写完了。这个时候就可以拷贝。
0 请登录后投票
   发表时间:2015-05-31  
其实你写与不写,不是直接让另外的程序直接copy走,而是应该写完后,在那个目录生成个记录表,让另外的程序去根据记录表做操作。
0 请登录后投票
   发表时间:2015-06-02  
可以考虑这样做,分两种文件后缀名,如:*.a,*.b,即没写完的文件和可以取走的文件,当写完后立刻把文件后缀名改为*.b,定时任务只管遍历*.b文件
0 请登录后投票
   发表时间:2015-06-02  
为什么不用控制文件呢?
我们做BI这是最常见的场景,一端程序给一个目录写,另一端程序从目录读,写程序把文件写完后,生成一个控制文件xxx.ctl文件,内容包括数据文件的名字、位置、大小等信息。读程序从目录里拿到控制文件xxx.ctl,从控制文件中获取数据文件,再读取数据文件。
这样就不会有写程序没写完,读程序就开始读的问题了。
0 请登录后投票
   发表时间:2015-06-02  
读程序把数据文件读完之后,把目录下的控制文件和数据文件一并挪到另一个目录下备份,一方面避免造成约定的公共目录越来越大,读写慢,另一方面备份的数据可以用作异常恢复和任务重跑。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics