|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 274
|
[Java] File
Salve, non risco a fare il controllo su un file.
Cioè vorrei che un all'avvio di un applicazione, controlli la data di ultima modifica di un mio file (myfile.lastModified()) e se quella data è di Ieri, rinomini il file in NomeFile_DatadiIeri.ext Grazie. Il controllo Dtae.after o Date.before controlla anche i Millisecondi |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Da quello che hai detto capisco che vuoi testare se il file è stato modificato proprio ieri e non altri giorni. Si può fare così: Codice:
long lastMod = f.lastModified ();
GregorianCalendar oggi = new GregorianCalendar ();
oggi.set (Calendar.HOUR_OF_DAY, 0);
oggi.set (Calendar.MINUTE, 0);
oggi.set (Calendar.SECOND, 0);
oggi.set (Calendar.MILLISECOND, 0);
GregorianCalendar ieri = (GregorianCalendar) oggi.clone ();
ieri.add (Calendar.DAY_OF_MONTH, -1);
if (lastMod >= ieri.getTimeInMillis () &&
lastMod < oggi.getTimeInMillis ())
{
/* Il file è esattamente di ieri */
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 274
|
Grazie.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Appiccico un esempio:
Codice:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
/* piglia il file */
File file = new File(args[0]);
/* quando è stato modificato, in millisecondi */
long time = file.lastModified();
/* oggi... */
Calendar fileTime = Calendar.getInstance();
/* oggi diventa la data del file */
fileTime.setTimeInMillis(time);
/* Stampa sulla console giorno/mese/anno ora.minuto del file */
System.console().printf("%d/%d/%d, %d.%d%n",
fileTime.get(Calendar.DAY_OF_MONTH),
fileTime.get(Calendar.MONTH) + 1,
fileTime.get(Calendar.YEAR),
fileTime.get(Calendar.HOUR_OF_DAY),
fileTime.get(Calendar.MINUTE));
/* oggi */
Calendar today = Calendar.getInstance();
/* se oggi è maggiore della data del file... */
if(today.compareTo(fileTime) > 0) {
/* quando uno è in vena di dire stupidaggini... :D */
System.console().printf("CuccoFile!!!%n");
/* crea l'infisso che andrà tra il nome del file e l'estensione */
String infix =
fileTime.get(Calendar.DAY_OF_MONTH) + "-" +
(fileTime.get(Calendar.MONTH) + 1) + "-" +
fileTime.get(Calendar.YEAR);
/* piglia il nome del file */
String fileName = file.getName();
/* prende la posizione dell'ultimo punto (per separare l'estensione) */
int dotOffset = fileName.lastIndexOf(".");
/* se c'è un'estensione (o un nome prima dell'estensione) */
if(dotOffset >= 0) {
/* separa l'estensione... */
String extension = fileName.substring(dotOffset, fileName.length());
/* separa il nome senza estensione del file */
String simpleName = fileName.substring(0, dotOffset);
/* compone il nuovo nome */
fileName = simpleName + "_" + infix + extension;
} else {
/* se non c'è estensione pospongo l'infisso al nome intero */
fileName = fileName + infix;
}
System.console().printf("File <%s> renamed to <%s>%n", file, fileName);
}
}
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! Ultima modifica di PGI-Bis : 07-05-2007 alle 12:25. Motivo: Risposta concorrente... |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 274
|
Così è simile a come avevo fatto.
Il problema, però è che vengono confrontati anche i millisecondi. Se creo un file ora ed un'altro dopo 100 millisecondi, in quel modo verrebbe rinominato. Io invece vorrei che il file venga rinominato se e solo se la Data Assoluta (gg/mm/aa) sia inferiore alla data odierna (gg/mm/aa). Grazie comunque per la risposta precedente. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
long lastMod = f.lastModified ();
GregorianCalendar oggi = new GregorianCalendar ();
oggi.set (Calendar.HOUR_OF_DAY, 0);
oggi.set (Calendar.MINUTE, 0);
oggi.set (Calendar.SECOND, 0);
oggi.set (Calendar.MILLISECOND, 0);
if (lastMod < oggi.getTimeInMillis ())
{
/* Il file ha data inferiore rispetto ad oggi 00:00:00 */
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 274
|
Ok, Grazie di nuovo.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:58.




















