2

我正在尝试确定文件何时被修改。目前我有一个类文件观察者类,其中包含

public class fileObserver extends FileObserver {
    public String absolutePath;
    public fileObserver(String path) {
        super(path, FileObserver.ALL_EVENTS);
        absolutePath = path;
    }

    @Override
    public void onEvent(int event, String path) {
        if (path == null) {
            return;
        }
        if (event == FileObserver.MODIFY) {
            Log.d("change","changed");
        }
    }
}

在我的主要活动中,我有

fileObserver test = new fileObserver(fullpathnamehere);
test.startWatching();

fullpathnamehere 是我要观察的文件的文件路径。我检查了,文件路径是有效的。谁能告诉我我做错了什么?

4

4 回答 4

1

该方法onEvent()没有被调用,因为路径不正确:

event fileObserver test = new fileObserver(fullpathnamenere);
test.startWatching();

检查你的文件路径是否正确!

尝试使用:

String fullpathnamenere = Environment.getExternalStorageDirectory().getPath() + "/stuff.txt";

更新:

我发现(感谢 Mark Murphy 先生) FileObserver不是递归的!

检查这个https://code.google.com/p/android/issues/detail?id=33659

我建议使用RecursiveFileObserver https://github.com/owncloud/android/blob/master/src/com/owncloud/android/utils/RecursiveFileObserver.java

于 2015-05-27T17:34:58.590 回答
0

像这样更改您的 onEvent() 方法...

 @Override
    public void onEvent(int event, String path) {
        if (path == null) {
            return;
        }
        if ((FileObserver.MODIFY & event)!=0&&path.equals("file_name")) {
            Log.d("change","changed");
        }
    }

活动中

fileObserver test = new fileObserver(parent_dir_path_of_the_file);
test.startWatching();
于 2015-05-27T17:37:51.220 回答
0

您必须检查的事项:

  1. 检查文件路径。
  2. 检查清单文件中的文件权限。
  3. 如果它的6.0以上必须动态添加权限。
于 2017-09-26T12:53:33.090 回答
0

你准备好接受正确的答案了吗?

我有同样的问题,我没有从 FileObserver 得到更新。可能是什么问题呢?File Observer 是一个非常非常非常简单的抽象类;只有三种方法。而且只有一个来实现!

我开始在不同的条件下进行测试,并开始得到 onEvent() 的响应!我使用 JStudio 文件管理器复制了一个文件并得到了响应。然后我再次使用了手机附带的文件管理器。没有反应!!

因此,实际上,如果您手机的文件管理系统进行任何更改,您将不会收到事件。如果第三方软件发生更改,您可能会收到通知。

这很糟糕。

一个解决方案可能是用 JNI 在 C 中创建一个本地文件观察器;使用linux api。

于 2019-09-08T16:01:47.780 回答