【问题标题】:How to detect file modification?如何检测文件修改?
【发布时间】:2011-11-15 06:22:24
【问题描述】:

我有一个包含一些数据的存储文件。我想检测它是否已被修改,然后在必要时解决问题。

我想过控制文件中的行数,但我卡住了。

此外,没有方法可以执行此操作:http://developer.android.com/reference/java/io/File.html

有什么想法吗?

【问题讨论】:

标签: android file-io data-integrity


【解决方案1】:

您可以尝试使用 md5 文件检查来检查文件的校验和。

Java md5 校验和: Getting a File's MD5 Checksum in Java

或者试试这个 http://www.rgagnon.com/javadetails/java-0490.html

我觉得还有比这更好的方法

【讨论】:

  • 你的意思是如果一个字符被删除,MD5会被修改?请问有代码示例吗?
  • 是的,一旦修改校验和将不再相同
【解决方案2】:

使用 File 的 lastModified 方法跟踪文件上次修改的时间戳

http://developer.android.com/reference/java/io/File.html#lastModified()

【讨论】:

  • 我如何存储以前的修改日期并控制日期是否已更改?
  • @androniennn -- 有很多方法......比如使用 SharedPreferences。即,与您存储想要持久引用的任何其他值的方式相同。
  • @andronienn:如果您要处理大量文件,最好使用 SQLite 数据库。在文件名上设置索引后,查找非常高效且快速
  • @Rich:不需要共享首选项来存储以前的文件修改日期,我认为它没用。但是我可以将它存储在一个字符串中,然后用新的字符串(日期)检查前一个字符串(日期)
  • 您有多种选择,但这完全取决于您希望如何持久化数据。 SharedPreferences 不需要很多代码,所以我不知道为什么你会说它没用。如果您需要在用户会话之间保留此信息(意思是,如果用户使用您的应用程序,修改文件,然后在一周后使用您的应用程序......您是否需要知道它已被修改),那么您需要保留此信息。 SharedPreferences,SQLite 数据库,将信息保存到文件,等等……你有选择,但如果你想要这些信息,你必须编写一些代码
【解决方案3】:

使用 MD5 校验和是一种非常密集的方法,但是如果您比较文件中“修改日期”数据的时间戳,您应该能够有效地找到已修改的文件。

这应该可以帮助您开始

File file = new File(absolute_file_location);

if (file.exists())
{
  Date lastModified = new Date(file.lastModified());
}

【讨论】:

  • 当我想在lastModified变量被修改时进行一些处理,我该如何编码?
  • if (storedTime
  • 运算符
  • 这就是为什么我没有使用日期对象,而是使用返回长值的“file.lastModified()”。支持 <. data>
【解决方案4】:

看看FileObserverdocumentation.

【讨论】:

    【解决方案5】:

    另一种方法是使用 Java 的 WatchService 监视文件的更改。

    https://docs.oracle.com/javase/tutorial/essential/io/notification.html

    不过,我不确定它在 Android 中的效果如何。

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 2021-04-17
      • 2017-04-17
      • 1970-01-01
      • 2012-03-18
      • 2011-09-30
      相关资源
      最近更新 更多