在开发需求中有一个需求是监控目录下拷贝进来的文件,并对文件进行处理,

使用的java.nio  、 watchService 进行的处理,如果小文件还好一点,拷贝就是一瞬间的事情,但是如果是一个大文件,比如
10G的文件可能就需要花费较长时间才能完成文件数据的传输,而对文件的处理肯定得保证文件数据的完整性,这边就得提到
文件是否正在传输过程中?文件是否完成数据的传输?  这些问题。
按照常理来说的话,watchService监控文件目录(watchService这边有个坑,在wins系统上,是可以递归监控文件夹的文件,神马意思呢,就是在被监控的a文件夹下面拷贝进去一个b文件夹,那么b文件夹内的文件和文件夹依旧会被监控到,而linux系统上是实现不了这个递推功能的,比如在被监控的a文件夹下拷贝进去一个b文件夹,watchService只能监测到a文件夹拷贝进来一个b文件夹,确不能监控到b文件夹里的文件.....顺手记录),拷贝进一个1M文件会触发三个动作:一次创建、二次修改,这边我的理解是这样的,一次创建是创建一个空的0kb的文件,第一次修改是对文件的大小进行一个扩容,将文件大小修改到1M,第二次修改是将填充文件的数据,按照正常逻辑是需要进行一次过来,捕捉最后一个动作,就可以判断文件数据的完整性
但现实就是这么的残酷,在实际开发中,watchService有时候只捕捉到2个动作:一次创建、一次修改  这个问题百思不得其解,这样就需要去判断文件数据的完整性,这边我是通过大量查阅和实践发现 File包中有个方法可以满足这个判断逻辑,那就是renameTo()方法  ,通过renameTo()方法去判断文件是否可以被重新命名去判断文件按是否被占用,如果文件还在拷贝过程中将会返回false,如果文件拷贝完成将会返回true,  这样就可以暂时实现判断,哎,这个方法有点粗糙,正在寻找新的方法去代替,先行记录下来。
 
比较两个文件是否一样的时候可以采用md5进行比较,但是不满足我的需求,还有RandomAccessFile ,网上说使用rws权限去读取,这边我还没有试过,我之前尝试过rw权限,在开发环境中是可行,但是在我的生产环境中是不可行的,表示不能理解,所以就没有尝试,待日后有空在进行实验

renameTo()判断文件是否被占用(判断大文件是否完成拷贝这个动作)的更多相关文章

  1. iOS将大文件映射到内存(读取大文件)

    http://blog.csdn.net/xyt243135803/article/details/40995759 在<中国区GPS偏移纠正(适用于Google地图)>一文中曾读取一个7 ...

  2. 18 IO流(十五)——RandomAccessFile随机访问文件及使用它进行大文件切割的方法

    本文部分内容转自:https://blog.csdn.net/nightcurtis/article/details/51384126 1.RandomAccessFile特点 RandomAcces ...

  3. 精讲RestTemplate第6篇-文件上传下载与大文件流式下载

    本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  4. Python组织文件 实践:查找大文件、 用Mb、kb显示文件尺寸 、计算程序运行时间

    这个小程序很简单原本没有记录下来的必要,但在编写过程中又让我学到了一些新的知识,并且遇到了一些不能解决的问题,然后,然后就很有必要记录一下. 这个程序的关键是获取文件大小,本来用 os.path.ge ...

  5. Html5大文件断点续传

    大文件分块   一般常用的web服务器都有对向服务器端提交数据有大小限制.超过一定大小文件服务器端将返回拒绝信息.当然,web服务器都提供了配置文件可能修改限制的大小.针对iis实现大文件的上传网上也 ...

  6. 基于WCF的支持跨局域网可断点续传的大文件传输服务实现

    题外话:这个系列的文章记录了本人最近写的一个小工程,主要包含了两个功能,一是对文件的断点续传的功能,二是基于WCF的一对多文件主动发送的功能,顺便这也是我自己在WCF学习路上的一个小成果吧. 在网上找 ...

  7. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  8. C# 大文件上传

    IHttpModule 分块上传大文件 IHttpModule 分块上传大文件 来源:http://www.cnblogs.com/HeroBeast/archive/2008/03/18/10848 ...

  9. B/S大文件断点续传

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  10. nodeJs + js 大文件分片上传

    简单的文件上传 一.准备文件上传的条件: 1.安装nodejs环境 2.安装vue环境 3.验证环境是否安装成功 二.实现上传步骤 1.前端部分使用 vue-cli 脚手架,搭建一个 demo 版本, ...

随机推荐

  1. vn.trader的Ubuntu运行环境搭建教程

    作者:量衍投资 转载请注明来源:维恩的派(www.vnpie.com) 准备Ubuntu 建议使用一个新安装干净的Ubuntu环境(如果你一定要使用老环境也行,万一不幸掉坑后再回到这步就好),我这里使 ...

  2. Centos 7 安装图形化环境

    安装系统时,使用了最小化安装,当需要用到图形界面的时候需要安装图形界面支持 环境是centos7.5最小化安装 1,先更新系统 yum -y upgrade 这里说明一下upgrade和update的 ...

  3. Linux基础入门-用户及文件权限管理

    一.Linux用户管理: 不同的用户的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于Linux的用户管理和权限机制,不同用户不能轻易查看.修改彼此的文件. 1. 查看用户: wh ...

  4. 异常:tomcat与windows时间不同步

    调试一个项目时发现用户那里服务器的Tomcat命令行中log4j输出的时间与操作系统时间不一致,因此日志记录的时间与操作系统时间也不一致,且正好相差8个小时.产生原因是因为Tomcat中的时区设置与操 ...

  5. Win7下,nginx默认80端口被System占用,造成nginx启动报错

    在win7 32位旗舰版下,启动1.0.8版本nginx,显示如下错误: 2012/04/02 13:55:59 [emerg] 7864#2376: bind() to 0.0.0.0:80 fai ...

  6. python3-基础8

    模块与包 什么是模块 模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. #在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别: 1 ...

  7. 神经网络常用的Numpy功能笔记

    数组初始化 x=np.array([[1,2]]) x=np.zeros((2,3)) 生成随机数 w=np.random.randn(2,3) PIL image转换成array img = np. ...

  8. python,运算符,基本数据类型

    a = 'py' in 'python' b = 'py' not in 'python' print(a)print(b) in :判断一个前面一个字符串中的字符是否完整的出现在后面的字符串中,如果 ...

  9. org.apache.catalina.LifecycleException项目启动报错

    严重: A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalin ...

  10. wx.navigateBack(OBJECT)怎么携带参数呢?

    wx.navigateBack(OBJECT) 关闭当前页面,返回上一页面或多级页面.可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层. OBJECT 参数说明: 参数 ...