FileObserver监听文件示例

mainActivity如下:

package c.c;
import java.io.File;
import android.os.Bundle;
import android.os.Environment;
import android.os.FileObserver;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.app.Activity;
/**
 * 利用FileObserver监听SD卡的文件变化
 * 如文件的建立和删除
 * 注意FileObserver是另外的一个线程
 * 所以在其中改变View是不可行的
 *
 */
public class MainActivity extends Activity {
	private Button mStartButton;
	private Button mAddButton;
	private Button mDeleteButton;
	private TextView mTextView;
	private String mSDCardPath;
	private String mFilePath;
	private File mFile;
	private SDCardFileObserver mFileObserver;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
	private void init(){
		mStartButton=(Button) findViewById(R.id.start_Button);
		mStartButton.setOnClickListener(new OnClickListenerImpl());
		mAddButton=(Button) findViewById(R.id.add_Button);
		mAddButton.setOnClickListener(new OnClickListenerImpl());
		mDeleteButton=(Button) findViewById(R.id.delete_Button);
		mDeleteButton.setOnClickListener(new OnClickListenerImpl());
		mTextView=(TextView) findViewById(R.id.textView);
		mSDCardPath=Environment.getExternalStorageDirectory().toString();
	}

	private class OnClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View v) {
			if (v.getId()==R.id.start_Button) {
				mFileObserver=new SDCardFileObserver(mSDCardPath);
				mFileObserver.startWatching();
				mTextView.setText("开始监听");
			}
			if (v.getId() == R.id.add_Button) {
				try {
					mFilePath=mSDCardPath+File.separator+"test.txt";
					mFile=new File(mFilePath);
					if (!mFile.exists()) {
						mFile.createNewFile();
					}
					mTextView.setText("创建"+mFilePath);
				} catch (Exception e) {
				}
			}
			if (v.getId() == R.id.delete_Button) {
                if (mFile!=null) {
					mFile.delete();
					mTextView.setText("删除"+mFilePath);
				}
			}
		}
	}

	private class SDCardFileObserver extends FileObserver{
		public SDCardFileObserver(String path) {
			super(path);
		}

		@Override
		public void onEvent(int event, String path) {
			switch (event) {
			case FileObserver.CREATE:
				System.out.println("------->创建文件,"+path);
				//the next code is not right
				//mTextView.setText("创建,"+path);
				break;
			case FileObserver.DELETE:
				System.out.println("------->删除文件,"+path);
				//the next code is not right
				//mTextView.setText("删除,"+path);
				break;
			default:
				break;
			}
		}

	}
	@Override
	protected void onDestroy() {
		super.onDestroy();
		mFileObserver.stopWatching();
	}
}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="match_parent" >

            <Button
                android:id="@+id/start_Button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:text="开始监听" />

            <Button
                android:id="@+id/add_Button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="增加文件" />

            <Button
                android:id="@+id/delete_Button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:text="删除文件" />
        </RelativeLayout>
    </LinearLayout>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/linearLayout"
        android:layout_centerHorizontal="true"
        android:paddingTop="20dip"
        android:text="@string/hello_world"
        android:textSize="20sp" />

</RelativeLayout>

 

时间: 2024-10-03 10:59:55

FileObserver监听文件示例的相关文章

Android监听文件和目录动态

android.os下的FileObserver类是一个用于监听文件访问.创建.修改.删除.移动等操作的监听器,基于linux的inotify. FileObserver 是个抽象类,必须继承它才能使用.每个FileObserver对象监听一个单独的文件或者文件夹,如果监视的是一个文件夹,那么文件夹下所有的文件和级联子目录的改变都会触发监听的事件. 所能监听的事件类型如下: ACCESS,即文件被访问 MODIFY,文件被 修改 ATTRIB,文件属性被修改,如 chmod.chown.touc

jQuery监听文件上传实现进度条效果的方法_jquery

原理: 给XMLHttpRequest对象的upload属性绑定onprogress方法监听上传过程 var xhr=new XMLHttpRequest(); xhr.upload.onprogress=function(e){} 因为jQuery默认使用的XMLHttpRequest对象是内部生成的无法直接给jq的xhr绑定onprogress方法 所以只要给jQuery重新生成一个绑定了onprogress的XMLHttpRequest对象即可实现 首先封装一个方法 传入一个监听函数 返回

android短信监听工具(示例代码)_Android

在学习本实例之前,读者请先了解一下android四大组件中的"广播接收者"的基本概念和使用. 由于是"监听程序",所以就不需要建立Activity.这样也算是一种"遮掩"吧.使用BroadcastReceiver,就能达到这"不可告人"的目的.呵呵.当然,使用服务来开发此类应用,更加合适.这里就不再深入讨论"服务"了.本实例仅供学习参考,请勿非法用途. 复制代码 代码如下: package cn.itcas

请教如何用C#实现从无线设备到pc的监听文件接收?

问题描述 我想做一个文件监听接收的程序,发送方是一台有wi-fi和蓝牙功能的照相机.接收方是pc机.程序开启后,处于监听状态.照相机开始发送文件(若干张照片),当发送完毕后,程序自动关闭.请问,各位C#的高手.哪里有相关的代码或者资料可以参考一下.小弟在此先谢谢各位了~~~~ 解决方案 解决方案二:不是很明白哦,你是通过蓝牙来传吗?解决方案三:蓝牙和wi-fi两种方式的都需要解决方案四:蓝牙和wi-fi两种都需要

WebSphere可以实时监听文件吗

问题描述 如题,WebSphere有文件监听功能吗?就是一个文件内容改变后,WebSphere能够监听到,以执行一些java程序 解决方案 解决方案二: IBMMQ8高级版有这个功能,

【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件

有一个小需求: 在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可. 基于这个需求,有了下面这段代码:[JDK  1.8] 1 package com.sxd.moveFile; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileOutputStream; 7 imp

Android开发之CheckBox的简单使用与监听功能示例

本文实例讲述了Android开发之CheckBox的简单使用与监听功能.分享给大家供大家参考,具体如下: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_

Android编程双重单选对话框布局实现与事件监听方法示例

本文实例讲述了Android编程双重单选对话框布局实现与事件监听方法.分享给大家供大家参考,具体如下: 首先是自定义XML布局代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pare

Flume监听文件夹中的文件变化,并把文件下沉到hdfs

1.采集目录到HDFS 采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去 根据需求,首先定义以下3大要素 采集源,即source--监控文件目录 : spooldir 下沉目标,即sink--HDFS文件系统 : hdfs sink source和sink之间的传递通道--channel,可用file channel 也可以用内存channel 配置文件spooldir-hdfs.conf编写: # Name the components o