项目中有个需要,需要根据接收后台推送的文件,然后拷贝到指定目录。这个功能用FileObserver 可以实现,当监测目录有新文件时,会触发FileObserver.onEvent(),在onEvent 里拷贝文件就可以了。
private void startFileObserverThread(){
Runnable structexce = new Runnable() {
public void run() {
int flags = FileObserver.CREATE|FileObserver.MOVED_TO;//1.在监测路径中新建文件、子文件夹或将文件、子文件夹移动到监测路径
mObserver = new FileObserver(SRC_PATH, flags) {
public void onEvent(int event, String path) {
//2.监测事件发生,触发onEvent
targetFile = null;
File[] files = new File(SRC_PATH).listFiles();
if(files==null){
return;
}
try {
Thread.sleep(10000);//3.加个延时,等后台把文件传完
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i=0; i<files.length; i++){
File f = files[i];
if(f.getName().matches("\\S*\\.zip$") && f.isFile()){
Log.d(TAG, "find target file: " +f.getPath());
targetFile = f;
break;
}
}
if ( targetFile != null) {
for(int j=0; j<10; j++){
//4.以防万一,最多拷贝10次