如何判断文件(从Dropbox网页读取)是否已在Java中更改?

时间:2013-01-24 01:45:10

标签: java dropbox last-modified

现在我正在使用Java进行分布式系统作业,因此我需要从多台计算机访问配置文件的一个副本。现在我可以从dropbox网页上读取和解析共享文件,例如:https://www.dropbox.com/s/ysn9yivqj7kwo0w/config.yaml。 我想要做的是添加一个守护程序线程来检测此文件是否已更改,如果更改,我需要重新配置系统的每个节点。

但是如何判断这个文件是否已经改变IN PROGRAM,没有下载整个文件然后做一些差异?我认为dropbox应该为文件添加类似时间戳的内容,但是如何才能访问此时间戳呢?

欢迎任何建议,非常感谢!

3 个答案:

答案 0 :(得分:2)

我会看一下内容-md5。所以你保留了以前版本的md5,如果它们不匹配,则下载文件。

答案 1 :(得分:1)

如果您使用sdk form dropbox, 您可以通过

获取文件的元数据
    meta = api.metadata(path, 1, null, false, null);

并通过

检查文件的最后修改日期或哈希值
    meta.hash;
    meta.modified;

答案 2 :(得分:0)

解决方案1 ​​

根据API documentation/metadata检索文件和文件夹元数据。比较哈希(md5)以检查

网址结构https://api.dropbox.com/1/metadata/auto/<path>

返回给定文件或文件夹的元数据。如果表示文件夹且list参数为true,则元数据还将包含文件夹内容的元数据列表。

在Java中使用

来自Java SDK documentation

public DbxEntry getMetadata(String path)
                     throws DbxException
Get the file or folder metadata for a given path.
 DbxClient dbxClient = ...
 DbxEntry entry = dbxClient.getMetadata("/Photos");
 if (entry == null) {
     System.out.println("No file or folder at that path.");
 } else {
     System.out.print(entry.toStringMultiline());
 }

<强>参数

path - 文件或文件夹的路径(请参阅DbxPath)。

<强>返回

如果给定路径中有文件或文件夹,请返回该路径的元数据。如果那里没有文件或文件夹,则返回null。

<强>抛出

DbxException

<强>更新

解决方案2(Hacky解决方法)

不幸的是,Dropbox没有为文件提供哈希值,它只提供目录。因此,如果您正在使用Dropbox API进行同步开发,则可以执行以下操作之一

  • 下载文件时,请将rev参数复制为包含修订号
  • 的参数
  • 比较上次修改的本地和云文件(注意:不保证始终有效。如果2人同时在本地同时编辑文件,其中一人覆盖草稿文件,则可能会出错正)。