2011-11-03 9 views
18

Ho tre codice. Questo è il primo in cui ottengo le informazioni sui metadati di qualsiasi url e in quei metadati che ho anche la data LastModified. Se corro questa classe allora ottengo la data dell'ultima modifica di URL as--Ottieni la data dell'ultima modifica di un URL

key:- Last-Modified 
value:- 2011-10-21T03:18:28Z 

Primo uno

public class App { 

    private static Map<String, String> metaData;  

public static void main(String[] args) { 

     Tika t = new Tika(); 

     Metadata md = new Metadata(); 
     URL u = null; 
     try { 
      u = new URL("http://www.xyz.com/documents/files/xyz-china.pdf"); 

      String content1= t.parseToString(u); 
      System.out.println("hello" +content1); 
     } catch (MalformedURLException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (TikaException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     try { 
      Reader r = t.parse(u.openStream(), md); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     try { 
     for (String name : md.names()){ 
      String value = md.get(name); 
      System.out.println("key:- " +name); 
      System.out.println("value:- " +value); 
      //getMetaData().put(name.toLowerCase(), md.get(name)); 
     } 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 

    } 

} 

Ma per secondo esempio proprio sotto questo quando ho eseguito questo codice e con la stessa url. Ottengo una diversa data dell'ultima modifica dell'URL. Come assicurarsi che sia giusto. Come ho provato ad aprire quel pdf nel browser, invece di aprirlo nel browser. si sta aprendo con Adobe PDF sul computer non sul browser, quindi non posso controllare Firebug.

Seconda Way--

public class LastMod{ 
    public static void main(String args[]) throws Exception { 
    URL url = new URL("http://www.xyz.com/documents/files/xyz-china.pdf"); 

    System.out.println("URL:- " +url); 
    URLConnection connection = url.openConnection(); 


    System.out.println(connection.getHeaderField("Last-Modified")); 
    } 
} 

Per quanto sopra esposto uno ottengo data Las Mod AS

Thu, 03 Nov 2011 16:59:41 +0000 

Terzo Way--

public class Main{ 
    public static void main(String args[]) throws Exception { 
    URL url = new URL("http://www.xyz.com/documents/files/xyz-china.pdf"); 
    HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 

    long date = httpCon.getLastModified(); 
    if (date == 0) 
     System.out.println("No last-modified information."); 
    else 
     System.out.println("Last-Modified: " + new Date(date)); 

} 
} 

E per terzo metodo, l'ho preso così--

Last-Modified: Thu Nov 03 09:59:41 PDT 2011 

Io sono confondere quale è giusto. Penso che il primo sia giusto. Qualsiasi suggerimento sarà apprezzato ..

risposta

4

Il primo pezzo di codice estrae la data dai metadati del file PDF, mentre gli altri due ottengono le informazioni dalle intestazioni HTTP restituite dal server Web. Il primo è probabilmente più accurato se si desidera sapere quando il documento è stato creato/modificato.

11

L'opzione migliore è la terza - connection.getLastModified(), perché è il metodo più facile da usare e ha il più alto livello di astrazione. Tutto il resto si trova su livelli più bassi di astrazione: il primo legge la risposta non elaborata e il secondo legge l'intestazione non elaborata. Il terzo legge l'intestazione e la converte a lungo.

La differenza tra le uscite è dovuta al fuso orario. Utilizzando new Date() si utilizza il fuso orario predefinito della VM. Preferisci il calendario o il migliore - joda-time DateTime che supporta fusi orari personalizzati.

+0

quindi sei sicuro con il terzo metodo che sto ottenendo destra lastmod Data .. Come io sono non riesco a capirlo ... – ferhan

+0

sì, guarda il mio aggiornamento – Bozho

0

L'ultima data di modifica dovrebbe essere in GMT (RFC 2822) così si dovrebbe ottenere ottenere in questo modo:

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
Long dateTime = connection.getLastModified(); 
connection.disconnect(); 
ZonedDateTime urlLastModified = ZonedDateTime.ofInstant(Instant.ofEpochMilli(dateTime), ZoneId.of("GMT")); 
Problemi correlati