code
package eventbus.com.alldemo;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.FileObserver;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.File;
import java.io.IOException;
/**
* Created by wjc on 19-5-6.
*/
public class FileObsActivity extends Activity implements View.OnClickListener {
private Button mCreate,mDelete,mLinstener,mStop;
private MyFileObs observer = null;
private String TAG = FileObserver.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.file_obs);
mCreate = (Button)findViewById(R.id.create);
mCreate.setOnClickListener(this);
mDelete = (Button)findViewById(R.id.delete);
mDelete.setOnClickListener(this);
mLinstener =(Button)findViewById(R.id.start_linstener);
mLinstener.setOnClickListener(this);
mStop=(Button)findViewById(R.id.stop);
mStop.setOnClickListener(this);
// fileInit();
}
private String target_file = "test.txt";
private String internal_root;
private void fileInit() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
internal_root = Environment.getExternalStorageDirectory().toString();
}
Log.d(TAG,"internal_root = "+internal_root);
int mask = FileObserver.ALL_EVENTS;
observer=new MyFileObs(internal_root);//不能监听 test.txt,要对父文件夹监听
observer.startWatching();
Log.d(TAG,"startWatching");
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
observer.stopWatching();
}
@Override
public void onClick(View v) {
File file = new File(internal_root+"/"+target_file);
switch (v.getId()){
case R.id.start_linstener:
fileInit();
break;
case R.id.create:
Log.d(TAG,"click createNewFile");
if (!file.exists()){
try {
boolean create = file.createNewFile();
Log.d(TAG,"createNewFile "+create);
} catch (IOException e) {
e.printStackTrace();
}
}
break;
case R.id.delete:
Log.d(TAG,"click delete");
if (file.exists()){
boolean delete = file.delete();
Log.d(TAG,"delete "+delete);
}
break;
case R.id.stop:
Log.d(TAG,"stopWatching");
observer.stopWatching();
break;
default:
break;
}
}
private class MyFileObs extends FileObserver{
public MyFileObs(String path) {
super(path);
}
@Override
public void onEvent(int event, String path) {
//Log.d(TAG,"onEvent event = "+event);
switch (event){
case FileObserver.CREATE:
Log.d(TAG," evnet create path = "+path);
break;
case FileObserver.DELETE:
Log.d(TAG," event delete path = "+path);
break;
default:
break;
}
}
}
}
log
01-01 13:54:43.401 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: internal_root = /storage/emulated/0
01-01 13:54:43.404 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: startWatching
01-01 13:54:46.789 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: click createNewFile
01-01 13:54:46.791 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: createNewFile true
01-01 13:54:46.798 16653-16739/eventbus.com.alldemo D/android.os.FileObserver: evnet create path = test.txt
01-01 13:54:46.830 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: click createNewFile
01-01 13:54:47.131 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: click createNewFile
01-01 13:54:48.497 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: click delete
01-01 13:54:48.498 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: delete true
01-01 13:54:48.500 16653-16739/eventbus.com.alldemo D/android.os.FileObserver: event delete path = test.txt
01-01 13:54:49.943 16653-16653/eventbus.com.alldemo D/android.os.FileObserver: stopWatching