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

使用的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. docker-compose up使用自定义的网段的两种方式(从其根源指定)

    问题描述         还是那个研究安全大业的同事,在部署他的秘密武器,是用docker-compose部署的,有差不多20多个docker-compose.yml文件,然后由于docker-com ...

  2. tomcat 常用命令 网上找的资料

    打开终端 cd /java/tomcat #执行 bin/startup.sh #启动tomcat bin/shutdown.sh #停止tomcat tail -f logs/catalina.ou ...

  3. 18.22 sprintf函数功能

    函数功能:把格式化的数据写入某个字符串 函数原型:int sprintf( char *buffer, const char *format [, argument] … ); 返回值:字符串长度(s ...

  4. asp.net mvc各种传值方式大全

    MVC 各种传值方式 ViewData传值. HomeController.cs Co de: public ActionResult Index(){       ViewData["Ti ...

  5. 如何让Enum枚举实现异或操作

    var flag = Week.Monday; flag = flag | Week.Wednesday; if ((flag & Week.Monday) == Week.Monday ) ...

  6. python基础知识13---函数对象、函数嵌套、名称空间与作用域、装饰器

    阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 ...

  7. .NET版本与CLR版本及兼容性

    WIN7原生的.net是2.0和3.5,打开和关闭windows功能里面可以看到.另外C:\Windows\Microsoft.NET\Framework下面也能看到..net framework1. ...

  8. HTML 理解标签 - 帧

    帧 : frame(已弃用) 是一个HTML元素,它定义了可以显示另一个HTML文档的特定区域.一个框架应该用在一个框架内 <frameset> iframe 表示嵌套的浏览上下文,有效地 ...

  9. java构建工具——ant使用

    Ant是跨平台的构建工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一.安装与部署 1.1 下载 下载地址:https: ...

  10. MSVC中C++ UTF8中文编码处理探究

    字符编码的问题,上大学那会儿就遇到过,一直都是云里雾里,没太搞清楚.最近又遇到了问题,想在C++的控制台上输出Utf-8编码的汉字字节流.尝试了好多次都是乱码,后来花了些时间查查资料,又和同事交流了一 ...