- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在从任何文件管理器或图库中删除图像之前复制文件,但是 FileObserver
的 onEvent
触发,但我只想在用户删除任何文件时专门获取事件来自 FileObserver
的观察路径
observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card
@Override
public void onEvent(int event, String fileName) {
if (fileName == null) {
return;
}
//a new file or subdirectory was created under the monitored directory
if ((FileObserver.DELETE & event) != 0) {
//handle deleted file
Log.e(TAG, "onEvent: DELETE");
Log.e(TAG, "onEvent:exists(): " + new File(pathToWatch + fileName).exists());
}
}
};
observer.startWatching();
上面的代码运行良好,当用户删除任何文件时也会打印日志,但当时文件不存在并返回 false 我认为可能是文件被删除,这就是为什么它返回 false 但我想删除用于备份目的的文件。由 Dumpster 完成,请帮助我!!
最佳答案
File Observer onEvent() 方法在任何文件被删除后调用。所以你无法复制任何已删除的文件。
我知道这个解决方案不合适,但你可以试试这个来复制已删除的文件。
当您在任何特定文件的 onEvent() 方法中收到删除事件时,通过使用该特定文件的文件输入流,您可以复制该文件。
public class RecoverFileObserver extends FileObserver {
private final String TAG = RecoverFileObserver.class.getSimpleName();
String originMd5="xyz";
FileInputStream fileInputStream;
String path;
String newPath;
private int length = 0;
String extension;
public RecoverFileObserver(String path) {
super(path, FileObserver.ALL_EVENTS);
this.path = path;
Log.d(TAG, "patException:" + path);
if (path.lastIndexOf(".") != -1) {
extension = path.substring(path.lastIndexOf("."));
this.newPath = RECOVERY_DIR + "/" + MD5Utils.getMD5Str(path) + extension;
} else {
this.newPath = RECOVERY_DIR + "/" + MD5Utils.getMD5Str(path);
}
try {
fileInputStream = new FileInputStream(path);
length = fileInputStream.available();
} catch (IOException e) {
e.printStackTrace();
}
RecoverInfo info = new RecoverInfo();
info.originMd5 = originMd5;
info.recoveryPath = newPath;
recoverInfoHashMap.put(path, info);
Log.e(TAG, "actualpath:" + path + "\n orignalmd5:" + originMd5);
}
@Override
public void onEvent(int event, String path) {
if (event == FileObserver.ACCESS) return;
Log.v(TAG, this.path + " | " + path + " : " + event);
switch (event) {
case FileObserver.ACCESS:
Log.d("xyzabc", "inside Access");
break;
case FileObserver.ALL_EVENTS:
Log.d("xyzabc", "inside AllEvents");
break;
case FileObserver.CLOSE_NOWRITE:
Log.d("xyzabc", "inside CLOSE_NOWRITE");
break;
case FileObserver.CLOSE_WRITE:
Log.d("xyzabc", "inside CLOSE_WRITE");
break;
case FileObserver.CREATE:
Log.d("xyzabc", "inside CREATE");
break;
case FileObserver.MODIFY:
Log.d("xyzabc", "inside MODIFY");
break;
case FileObserver.MOVED_FROM:
Log.d("xyzabc", "inside MOVED_FROM");
break;
case FileObserver.MOVED_TO:
Log.d("xyzabc", "inside MOVED_TO");
break;
case FileObserver.MOVE_SELF:
Log.d("xyzabc", "inside MOVE_SELF");
break;
case FileObserver.OPEN:
Log.d("xyzabc", "inside OPEN");
break;
case FileObserver.ATTRIB:
Log.d("xyzabc", "inside attrib");
copyFile(fileInputStream, this.path, this.newPath, length, originMd5);
break;
case FileObserver.DELETE:
Log.d("xyzabc", "inside delete");
copyFile(fileInputStream, this.path, this.newPath, length, originMd5);
break;
case FileObserver.DELETE_SELF:
Log.d("xyzabc", "inside delete self");
copyFile(fileInputStream, this.path, this.newPath, length, originMd5);
break;
case 32768:
Log.d("xyzabc", "inside 32768");
stopWatching();
File file = new File(this.path);
if (file.exists()) {
RecoverFileObserver fileObserver = new RecoverFileObserver(this.path);
fileObserver.startWatching();
myFileObserverHashMap.put(file, fileObserver);
} else {
myFileObserverHashMap.remove(file);
}
break;
default:
break;
}
}
@Override
protected void finalize() {
Log.d("xyzabc", "inside finalize");
super.finalize();
}
此解决方案适用于少量文件。否则你会遇到很多文件打开错误。希望对您有所帮助。
关于android - Fileobserver 的 onevent 方法触发但我如何在删除任何文件之前获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889572/
我正在使用 FileObserver 来查看 android 中的文件夹。当用户在这个文件夹中修改或创建一个新文件时,FileObserver 应该对这个文件做一些事情。 问题是通过使用子句 File
我有一个目录,用户可以将文件从另一台设备传输到该目录。我有一个 FileObserver 监视那个目录。但我不知道要注意什么。我需要知道文件何时完成传输,以便将其移动到另一个位置。那么我要注意什么事件
我遇到了以下问题: 在我的 Activity 中,我有一个列出外部文件目录内容的 ListView 。我希望列表在内容发生任何变化时立即更新,所以我有: public class FileAdapte
我在 Activity 的 onCreate 函数中声明了 1 个 fileObserver。这是第一次,每当您对文件目录进行任何更改(具体而言,我删除了文件夹)时,观察者都会工作并广播一个 Inte
我正在一个家庭更换应用程序的主要 Activity 中实现一个文件观察器。它会耗尽电池电量吗? 谢谢 最佳答案 FileObserver 不应耗尽电池电量。 FileObserver 监听 iNoti
我需要监控文件夹中的所有文件,当文件打开时(FileObserver.OPEN)我想执行一个方法。问题是有时,FileObserver 实例被 GC 收集,我试过这个: final MyFil
这是我的代码: public class SyncNotifyService extends Service { private final static String TAG = "File
好的,这很简单:我有一个 FileObserver 类来观察带有音乐的文件夹。所以我实现了 onEvent 和所有这些东西,但是当我使用文件管理器将文件移动或粘贴到该文件夹时,我得到的不是 Fil
根据文档, "Each FileObserver instance monitors a single file or directory. If a directory is monitored,
我怀疑我已经知道这个问题的答案了,但我还是想请教专家。 是否可以使用 FileObserver 类来监视对属于其他应用程序的文件的更改(即/data 目录中不属于实现 FileObserver 的应用
在 Android FileObserver 中,当在观察文件夹中创建目录或在该文件夹中删除目录时,我会收到一些奇怪的事件编号,例如 (1073742080, 1073742336)。 对于文件夹的创
在我的 Android 应用程序中,我想检测目录中的事件。这是代码: String path = Environment.getExternalStorageDirectory()
我很想知道是否有比 FileObserver 更好的方法来监视目录的文件更改/创建/删除。 FileObserver 需要持续引用它,这需要持续运行的服务,这很困难,也是一种不好的做法,对吧? 对于如
我想在服务中使用 FileObserver 观察是否在 /storage/emulated/0/DCIM/Camera 中添加了任何文件/文件夹,但它不起作用。如果我的代码有什么问题请告诉我🙏。这是
我需要在一个目录上设置一个 FileObserver。观察期链接到一个长时间运行的 Activity ,长时间运行是因为它有一个包含很多页面的 ViewPager。我没有将 FileObserver
我正在使用 FileObserver观察目录的变化。该过程在 90% 的时间里运行良好,但偶尔会失败。 这是一个 logcat 的工作示例: 04-23 21:12:03.873: V/ItemObs
在我的应用程序中,我有不同的组件,它们使用 FileObservers 监视 sdcard 中的特定文件。所以有两个 File Observer 实例观察一个文件,比如 abc.xml 的所有事件。
我想监控android系统文件的变化 "/sys/class/net/eth0/operstate" 用于监控以太网状态。 我写了一个 File Observer 类,但我没有收到任何事件public
我正在编写一个使用 android 中的 fileobserver 的应用程序。当我以任何方式修改文件(创建等)时,它应该上传。为了实现一个队列并防止使用线程等耗尽内存,我想使用 IntentServ
我现在正在编写 FileObserver 代码。我有以下代码,如果运行它,我将收到 NullPointerException。 public class FileModificationService
我是一名优秀的程序员,十分优秀!