FileObserver监听文件示例

简介: mainActivity如下: package c.c; import java.io.File; import android.os.Bundle; import android.

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>


 

相关文章
|
4月前
|
网络性能优化 调度 网络虚拟化
配置HQoS示例
HQoS简介 HQoS通过多级队列进一步细化区分业务流量,对多个用户、多种业务等传输对象进行统一管理和分层调度,在现有的硬件环境下使设备具备内部资源的控制策略,既能够为高级用户提供质量保证,又能够从整体上节约网络建设成本。 交换机的HQoS主要通过流队列和用户队列实现。
|
1月前
|
Windows
Windows平台如何修改监听的服务名称?
【8月更文挑战第15天】在Windows平台上可透过注册表编辑器、命令提示符或第三方工具修改服务的显示名称。首先,通过注册表编辑器找到`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services`下的目标服务,修改其“DisplayName”键值。或者,在命令提示符中使用`sc config`命令来变更服务名称。此外,利用第三方工具如Windows Service Manager也能简化此过程。修改前请确保了解可能的影响并做好备份。
|
1月前
|
JavaScript 前端开发
Vue中传递自定义参数到后端、后端获取数据(使用Map接收参数)
这篇文章讲述了如何在Vue中通过Axios二次封装传递自定义参数到后端,并展示了后端如何使用Map接收这些参数,以及如何避免参数转换错误和统一接口设计的方法。
|
4月前
当监听的属性是对象的引用时,`watch`选项是否会触发监听?
当监听的属性是对象的引用时,`watch`选项是否会触发监听?
30 2
|
4月前
|
JavaScript
如何使用`watch`选项来监听特定属性的变化?
如何使用`watch`选项来监听特定属性的变化?
32 0
|
11月前
组件配置示例
组件配置示例
43 3
|
10月前
|
Java 容器
SpringMVC中参数是如何绑定and返回结果是如何解析的?
SpringMVC中参数是如何绑定and返回结果是如何解析的?
51 0
activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便
activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便
1084 0
activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便
|
Java 应用服务中间件
publiccms中,怎么修改默认的端口8080以及默认上下文名称
publiccms中,怎么修改默认的端口8080以及默认上下文名称
126 0
|
前端开发 PHP
无参数名post数据客户端以及接口是如何实现的?
无参数名post数据客户端以及接口是如何实现的?
240 0