Lug 27

JAVA – Convertire un InputStream in un oggetto Document

Funzione di conversione di un oggetto InputStream (e tutte le sue sottoclassi) in un oggetto Document W3C su cui è possibile effettuare la lettura/manipolazione dei nodi XML.

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public static Document toDocument(InputStream is) throws ParserConfigurationException,IOException , SAXException{

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
Document doc = db.parse(is);

return doc;

}

Apr 23

Modificare dinamicamente il Content Type di una JSP

Lavorando con il web capita non raramente di dover settare il valore del content-type all’interno dell’header di risposta.

In alcuni casi, addirittura può essere utile settare il content type dinamicamente a seconda della risposta che si sta esibendo.

Per settare il valore del content-type in una Java Server Page si può usare il seguente codice.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" %>

Ill valore dell’attributo contentType può specificare il formato (es. text/html, text/xml) e/o il charset (es. ISO-8859-1, UTF-8).

Si può anche scrivere direttamente il codice scriptlet modificando la response:

<% response.setContentType(“text/html; charset=ISO-8859-1”); %>

La comodità di questa soluzione è permette anche di utlizzare come valore di questo attributo una variabile, magari reperibile dalla request:

<% String r=(String)request.getAttribute(“responseType”);response.setContentType(r); %>

Ott 23

JAVA – Come ottenere l’anno corrente in Java

Come mostrare correttamente l’anno corrente in Java (senza usare il metodo Date.getYear)
Fino alla versione del JDK 1.1 veniva abitualmente usato il metodo java.util.Date.getYear()!
Questo metodo è deprecato dalla JDK 1.2 in poi in quanto, per gli anni successi al 1999 restituiva il numero di anni passati dal 1900.
Per ottenere correttamente l’anno in corso si può utilizzare il seguente codice:
Calendar calendar = GregorianCalendar.getInstance();
System.out.printl(“ANNO CORRENTE:” + calendar.get( Calendar.YEAR ));

invece di:

Date d = new Date();
Systtem.out.printl(“ANNO CORRENTE:” + d.getYear());

Che invece mostrerebbe come risultato (nel 2009):
ANNO CORRENTE:109

Ott 23

JAVA – Ottenere il primo giorno della settimana

Ottenere il primo giorno della settimana

Nel caso serva ottenere il primo giorno della settimana in riferimento a un giorno specifico, la funzione per ottenere questo risultato è la seguente:
Codice:
/**
** IN: Date today – giorno di riferimento all’interno della settimana du cui si vuole conoscere il primo giorno
**/
public static Date getCurrentMonday(Date today)
{
Date monday = null;
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(today);
int day = rightNow.get(Calendar.DAY_OF_WEEK);
int distance = 0;
if (day == Calendar.MONDAY)
{
monday = rightNow.getTime();
}
else
{
distance = day – Calendar.MONDAY;
if (distance == -1)
distance = 6;
monday = (Date) (rightNow.getTime());
monday.setTime(monday.getTime() – 1000 * 60 * 60 * 24 * (distance));
}
return monday;
}
Ad esempio quand’è lunedì nella settimana contenente il 25-07-2008? (risp. 21-07-2008)

La funzione ha impostato come primo giorno della settimana il lunedì, in caso si voglia cambiare il giorno di rifermento va cambiato nel codice Calendar.MONDAY con la costante del giorno che interessa (definita nella classe Calendar)

Ott 14

JAVA – Listing di file ordinati per data

Per ottenere un listing di una directory di file, ordinata per data, si può usare il seguente codice:

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;

public class FileUtils{

public static void main(String args[]) throws Exception {
String cartella=”c://miacartella”);
File files[] = FileUtils.dirListByAscendingDate
(new File(cartella));
for (File file : files) {
System.out.println(file.getName() + ” ”
+ new Date(file.lastModified()));
}
System.out.println(“DIR ->”);
files = FileUtils.dirListByDescendingDate
(new File(“C:/Applications/folder”));
for (File file : files) {
System.out.println(file.getName() + “t”
+ new Date(file.lastModified()));
}

}

public static File[] dirListByAscendingDate(File folder) {
if (!folder.isDirectory()) {
return null;
}
File files[] = folder.listFiles();
Arrays.sort( files, new Comparator()
{
public int compare(final Object o1, final Object o2) {
return new Long(((File)o1).lastModified()).compareTo
(new Long(((File) o2).lastModified()));

}
});
return files;
}

public static File[] dirListByDescendingDate(File folder) {
if (!folder.isDirectory()) {
return null;
}
File files[] = folder.listFiles();
Arrays.sort( files, new Comparator()
{
public int compare(final Object o1, final Object o2) {
return new Long(((File)o2).lastModified()).compareTo
(new Long(((File) o1).lastModified()));
}
});
return files;
}
}

In realtà chi fa il lavoro “sporco” di ordinamento è il codice di Compare:

public int compare(final Object o1, final Object o2) {
return new Long(((File)o1).lastModified()).compareTo
(new Long(((File) o2).lastModified()));

che può essere personalizzato all’occorrenza su qualsiasi campo di proprietà dell’oggetto File.

Ott 10

JAVA – Convertire da String a CLOB

I database Oracle usano il tipo CLOB per la memorizzazione di testi estremamente lunghi (superiori ai 4000 caratteri nella versione 10), la memorizzazione di una stringa Java in questi campi non è possibile direttamente e richiede dunque una conversione.

Di seguito il codice per la conversione:

public static CLOB getCLOB( String clobData )
{
try{
return getCLOB(createConnection(), clobData);
}catch ( Exception exp ) {
//TODO: Stampa dell’errore

return null;
}
}

public static CLOB getCLOB(Connection connection, String clobData )
throws Exception {
CLOB tempClob = null;

try {
// crea un nuovo CLOB temporaneo
tempClob = CLOB.createTemporary(connection, true, CLOB.DURATION_SESSION );

// Aple il CLOB temporaneo in modalità read/write per abilitarne la scirttura
tempClob.open( CLOB.MODE_READWRITE );
Writer tempClobWriter = tempClob.getCharacterOutputStream( );
tempClobWriter.write( clobData );

tempClobWriter.flush( );

//Chiude lo stream
tempClobWriter.close( );

// Chiude il CLOB temporaneo
tempClob.close( );

} catch ( Exception exp ) {
// Rilascia l’oggetto CLOB
tempClob.freeTemporary( );
//TODO
}

//Restituisce il clob elaborato

return tempClob;
}