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

使用的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. shell生成随机字符串

    #!/bin/bash i=1while [ $i -le 10000 ]doa=`echo `< /dev/urandom tr -dc A-Za-z0-9 | head -c6``echo  ...

  2. Day 15 模块

    模块 ```python'''模块:一系列功能的集合体 定义模块:创建一个py文件就是一个模块,该py文件名就是模块名 使用模块:在要使用模块的文件中,通过 import 模块名 来导入模块''' ' ...

  3. 星图智控推嵌入式家用AI摄像头

    1.星图智控推嵌入式家用AI摄像头 这款新产品核心卖点是使用intel movidius vpu,同时运行了5种AI神经网络,支持自定义AI拓展功能,全本地存储,以及本地AI处理. 与市面上同类产品相 ...

  4. xml和java对象互转:JAXB注解的使用详解

    先看工具类: import org.slf4j.Logger; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; ...

  5. 搭建一个microblaze的最小系统

    搭建一个microblaze的最小系统 首先例化一个microblaze核 对microblaze核进行配置 勾选: 这个是使能外部存储BRAM作为程序运行缓冲区 第二个是需要勾选 这个是使能AXI数 ...

  6. pycrypto安装出错的问题 intmax_t C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.

    前言: 需要安装 Microsoft Visual Studio2017 Community 或者buildtools 解决方案一(解决了python3.7上安装pycrypto-2.6.1的错误问题 ...

  7. sequelize 中文文档

    https://demopark.github.io/sequelize-docs-Zh-CN/

  8. 使用Visual Studio Code开发(编译、调试)C++程序

    总体安装步骤 安装VSC(Visual Studio Code). 安装C/C++编译器(如MinGW-w64),然后配置好环境变量.//完成这步即可在VSC的终端(命令行)下编译.运行.cpp程序了 ...

  9. spring boot项目中处理Schedule定时任务

    项目中,因为使用了第三方支付(支付宝和微信支付),支付完毕后,第三方支付平台一般会采用异步回调通知的方式,通知商户支付结果,然后商户根据通知内容,变更商户项目支付订单的状态.一般来说,为了防止商户项目 ...

  10. VMware 打开虚拟机的时候提示 internal error 内部错误 遇到这个问题时我的解决方法

    任务栏右键,启动任务管理器,选择“服务”选项卡 找到这个服务 启动这个服务后,再次尝试打开虚拟机,就OK了.