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

使用的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. 深入理解CSS选择器优先级

    题外话 今天把 <CSS REFACTORING>(中文名叫<CSS重构:样式表性能调优>)电子书粗略的浏览了一遍,这本书很薄,150页左右,首先是介绍了什么是重构并举了两个简 ...

  2. 1、IT人思维之投资开篇 - IT人思维之投资

    在IT圈中,很多人的认识就只在于工作中获取收益,这个观点是狭隘的,本身就不符合投资领域的内容.所以,在工作之余,笔者就对投资领域的内容进行的分析和收集整理相关的投资方面的内容,一方面对笔者自己的投资方 ...

  3. rocketmq 4.3.2 解决远程不能消费问题,解决未识别到公网IP问题

    1.解决远程不能消费问题 问题描述: nameserver和broker启动后,用tools(命令如下)能发送消息和消费消息,在局域网服务器能发送消息,消费启动后收不到消息通知问题 sh tools. ...

  4. Logback动态修改日志级别

    https://blog.csdn.net/totally123/article/details/78931287

  5. html限制文本框只能输入数字和一个小数点

    近期在做一个前台页面,有一个文本框是用来输入充值金额的,就想到了限制用户只能输入纯数字的数据且只能包含一个小数点.下面就是我实现的代码 $(function() { //阻止数字键以外的按键输入 $( ...

  6. 关于Oracle字符集在dmp文件导入导出中的乱码影响

    Oracle 在进行dmp备份和还原的时候,服务器端字符集和客户端字符集会对这个过程有较大影响,特别是数据表中存储了中文.存储过程中使用了中文编码(注释)的时候,如果没有处理好字符集的问题,在进行还原 ...

  7. 面试题_默认传参list

    # ###2.值是多少 def extendList(val, list=[]): list.append(val) return list 如果默认形参是列表,会提前在内存中开辟一个空间存储列表 如 ...

  8. 在写WebApi判断用户权限时返回数据和接受支付结果 定义返回数据类型

    using ADT.Core.Encrypt; using System; using System.Collections.Generic; using System.Linq; using Sys ...

  9. 使用Microsoft自带的小工具将可执行文件(.exe)注册为系统服务

    首先,我们从Microsoft下载Windows Resource Kits,Download 下载完成后,运行rktools.exe进行安装. 安装完成后,我们打开安装目录,将其中的"in ...

  10. Mac git 上传到 github

    上传本地项目到github 1.初始化本地项目 进入到你的项目,根目录下git init,会在你的项目的根目录下多出一个.git的文件夹,也许你的mac隐藏了,但是用命令行或者vscode等工具是可以 ...