Android: how to know file located in web server is modified?

前端 未结 2 1205
梦如初夏
梦如初夏 2020-12-25 09:10

I am parsing Xml file located in web server and storing parsed data in to database. for my app I am using data from database. I need to parse the xml file only if the file i

相关标签:
2条回答
  • 2020-12-25 09:14

    Calculate the MD5 of the file. You can save the old one and compare it?

    If you don't know how, check out this for example: Getting a File's MD5 Checksum in Java

    0 讨论(0)
  • 2020-12-25 09:25

    Since you are retrieving your .xml file from a web server, this should be relatively easy without having to do a server side MD5 sum.

    If you are doing a HTTP request for the xml file you can simply perform a HEAD request from the web server and this will return if the file has changed/modified or if it doesn't exist. This is also lightweight and the best part is that the server should already do this for you.

    Edit: re-reading your question, looks like you had the same idea. Here's the code.

    import java.net.*;
    import java.io.*;
    
    // Using HTTP_NOT_MODIFIED
    public static boolean Changed(String url){
        try {
          HttpURLConnection.setFollowRedirects(false);
          HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
          con.setRequestMethod("HEAD");
          return (con.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED);
        }
        catch (Exception e) {
           e.printStackTrace();
           return false;
        }
      }
    
    // GET THE LAST MODIFIED TIME
    public static long LastModified(String url)
    {
      HttpURLConnection.setFollowRedirects(false);
      HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
      long date = con.getLastModified();
    
      if (date == 0)
        System.out.println("No last-modified information.");
      else
        System.out.println("Last-Modified: " + new Date(date));
    
      return date;
    }
    

    See:

    • HttpURLConnection
    • HyperText_Transfer_Protocol HttpStatus 304 (Not Modified)

    Alternatively if your server supports them you can use ETags to find out if your file has been modified.

    • http://www.xpertdeveloper.com/2011/03/last-modified-header-vs-expire-header-vs-etag/
    0 讨论(0)
提交回复
热议问题