giovedì 28 aprile 2016

Java - leggere tutti i file di una directory e scriverne il contenuto su file

Stessa identica cosa dello script in perl solo in java. Ho usato delle librerie esterne (per il log) e qualche classe in piu' (di utilita' etc).

Se non avete voglia di rileggervi i requisiti erano questi: La richiesta e' questa: leggere un x numero di files (non specificato) la cui estensione non e' nota e buttare tutto su un unico file. Inoltre e' richiesto di non metterci troppo tempo negli sviluppi e non c'e' richiesta di raffinatezze grafiche o robe cosi' (aka seghe mentali).

Di conseguenza ho eliminato del tutto l'interazione con l'utente (salvo un file di log)



Tre packages. Forse possono sembrare un eccesso per un progetto cosi' piccolo, ma fidatevi non e' cosi'. Avere una buona organizzazione mentale, e' fondamentale per tenere in ordine nei progetti, e questo e' indifferente che il progetto abbia 3 classi o 3000. Deve essere un processo automatico. Cosi' come i commenti. I packages:

  • file: contiene le classi che si occupano dei file, in questo caso chi legge/scrive
  • main: contiene la classe che esegue materialmente il codice (il main)
  • util: contiene le classi di utilita'

La Classe FileManager

Si occupa di leggere e scrivere i file, ha 4 metodi:

  • getListFile(file): che restituisce tutto quello che contiene la directory passata come parametro
  • readFile(File): legge il contenuto di un file e lo restituisce sotto forma di lista di stringhe
  • writeFile (String, List): legge il contenuto di una lista di file (passata come parametro e li scrive in un nuovo file (il cui nome e' passato come parametro)
  • write(BufferedWriter, List): usa un buffered writer passato come parametro per scrivere la lista passata (questo consente di scrivere piu' file in un unico stream e chiudere suddetto stream solo alla fine

La Classe EntryPoint

C'e' poco da dire, prende il path locale e lo passa al file manager, inoltre logga (come info) i vari file scritti e gli eventuali errori (come error) usando gli appositi metodi della classe LoggingUtil

La Classe LoggingUtil

ha 3 metodi statici.

  • getLogger(): per avere un'istanza del logger - se il log e' null lo istanzia perima di restituirlo
  • info(String): scrive la stringa come info
  • error(String, Throwable): scrive un error con il messaggio e lo stacktrace
A proposito di getLogger(): usa un basic configurator per prendere caricare il file log4j.properties, e' necessario usare un file appender da dare in pasto al log, altrimenti non avrete alcun file.

La Classe Utility

Non c'e' molto perche' non mi serviva molto, ho due metodi

  • formatDate(Date, String): formatta la data in stringa usando il pattern specificato
  • getActualTime(): prende la data attuale e formatta prendendo solo ora minuti e secondi separati da :

Il progetto Java e' piu' complesso, a parita' di risultato, e anche piu' pesante in termini di dimensioni (400KB rispetto ai 2 del perl) e anche di prestazioni. Ma ha il vantaggio che quasi tutti hanno una JRE installata e ha la possibilita' di crescere se viene creata un'interfaccina in swing per chiedere quali file mergiare e dove salvare il file mergiato (e come chiamarlo). Ma questo viene meno ai principi di semplicita' e velocita' di svilluppo che erano stati richiesti.

Nessun commento:

Posta un commento

I messaggi non appaiono subito ma a seguito dell'approvazione di un moderatore. Siete pregati di seguire le seguenti regole