26 febbraio 2010

FileUtils : funzionalità aggiuntive per la gestione dei files in Java

Tramite questo post metto a disposizione l'implementazione di una classe di utilità che implementa alcune funzionalità per la gestione dei Files in Java.

In dettagli le funzionalità implementate sono le seguenti :

- Cancellare i files più vecchi di un certo numero di giorni da una cartella
- Creare una cartella nel caso in cui non esista
- Recuperare l'elenco dei files da una cartella ordinandoli per data crescente / decrescente.

Il codice qui di seguito :
package it.fritzzz.utils;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/***
* Classe di utilità per la gestione dei files
* @author a.franzi
*
*/
public class FileUtils {

/***
* Ordina e restituisce i files per data di ultima modifica
* @param directory : directory su cui eseguire il list del files
* @param asc : boolean (true = dal più lontano al più recente ; false = il contrario)
* @return : List di nomi files
*/
public static List listFilesOfDirOrderByLastModifiedDate(final File directory,boolean asc){
if (directory!=null && directory.isDirectory()) {
String[] children = directory.list();
if (children!=null && children.length>0){
List childList = Arrays.asList(children);
Collections.sort(childList,new Comparator() {

public int compare(Object o1, Object o2) {
if (o1 !=null && o2 !=null){
File file1 = new File(directory, (String)o1);
File file2 = new File(directory, (String)o2);

if (file1.lastModified()==file2.lastModified()){
return 0;
}else if (file1.lastModified()>file2.lastModified()){
return 1;
}else if (file1.lastModified()<file2.lastModified()){
return -1;
}
}
return 0;
}
});
return childList;
}
}
return null;
}


/***
* Metodo per rimuovere i files troppo vecchi da una determinata cartella
* @param folderName : nome della cartella
* @param numberOfDays : numero di giorni di tolleranza
* @return : boolean true se tutto è andato a buon fine
*/
public static boolean removeTooOldFilesFromDir(String folderName, int numberOfDays){
boolean ok = true;

try{
File dir = new File(folderName);

if (dir.isDirectory()){
File[] filesIntoDir = dir.listFiles();
if (filesIntoDir!=null && filesIntoDir.length> 0){
for (int i = 0 ; i < filesIntoDir.length; i++){
if (filesIntoDir[i].isFile()){
long lastUpdateOfFile = filesIntoDir[i].lastModified();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(lastUpdateOfFile);
Calendar today = Calendar.getInstance();
today.add(Calendar.DAY_OF_YEAR, -numberOfDays);
if (cal.before(today)){
boolean currDelete = filesIntoDir[i].delete();
if (!currDelete){
System.out.println("Problem removing too old file : "+filesIntoDir[i].getAbsolutePath());
ok = false;
}else{
System.out.println("Removed too old file : "+filesIntoDir[i].getAbsolutePath());
}
}
}
}
}else{
throw new IOException("nessun file presente nella cartella : "+folderName);
}

}else{
throw new IOException("il path : "+folderName+" non è una directory");
}
}catch(IOException ex){
System.out.println("Eccezione : "+ex.getMessage());
ok = false;
}


return ok;
}

/***
* Metodo per creare una cartella nel caso non esiste gia'
* @param path : path
* @return : boolean
*/
public static boolean createFolderIfNotExits(String path){
File folder = new File(path);
if (!folder.exists()){
return folder.mkdirs();
}else{
System.out.println("la cartella : "+path+" esiste gia'");
}
return false;
}
}

Nessun commento: