Post

AND e OR, bit a bit e logici

DOMANDA: Ho letto che in Java posso scrivere l'AND (o OR) con & ( | ) oppure con && ( || ). Perché c'è questa differenza? E' la stessa cosa? RISPOSTA: Partiamo dall'ultima domanda: no, non sono la stessa cosa.  In Java esistono due modi per effettuare l' AND e l' OR . AND bit a bit: Con un solo & stiamo dicendo alla Java Virtual Machine di effettuare un AND bit a bit , ovvero un'operazione binaria di questo tipo: 1010 & 1111 = 1010 (sapendo che l'AND da come risultato 1 quando da entrambe le parti c'è 1). Lo stesso con un OR bit a bit : 1010 | 1111 = 1111 (sapendo che l'OR da come risultato 1 quando da almeno una delle due parti c'è 1). Un esempio di utilizzo di AND bit a bit molto utilizzato in informatica è il calcolo delle maschere di rete (tra l'IP del pc e quello della maschera). L'effetto collaterale dell'AND (OR) bit a bit è di valutare tutte le espressioni prima di effettu

Creare file compressi/zippati

DOMANDA: Posso creare un file .zip o un file compresso in Java? RISPOSTA: Nella classe Compress qui di seguito, vi mostro quanto è semplice comprimere un'intera directory: package compressione; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Compress {  public static void compress(File f,                              String path,                              ZipOutputStream zos)                throws IOException {     boolean isDirectory = f.isDirectory();     //le directory terminano con "/", altrimenti sono file     final String nextPath = path +                             f.getName() +                            (isDirectory ? "/" : "" );       ZipEntry zipEntry = new ZipEntry(nextPath);     zos.putNextEntry(zipEntry);     if (isDirectory) {         File[] child = f.listFiles()

Stampare su carta con Java

DOMANDA: Come posso effettuare la stampa in Java? RISPOSTA: Java mette a disposizione delle librerie che fanno a caso nostro e, come vedete dall'esempio di seguito, è molto semplice interfacciarsi con la nostra stampante : La classe Stampa : package stampa; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; public class Stampa implements Printable {  public Stampa() throws PrinterException{    PrinterJob pj = PrinterJob.getPrinterJob();    pj.setJobName( "TestStampa" );    // apriamo la finestra di dialogo della stampante    pj.printDialog();    pj.setPrintable( this );    pj.print();  }  public int print(Graphics g, PageFormat pf, int page)                         throws PrinterException {    // abbiamo solo una pagina    // (l'indicizzate da 0)    if (pag

Ricezione Email con Java Mail

DOMANDA: In Java è possibile ricevere email? RISPOSTA: Anche qui, come nel post su come inviare un'email con Java , ci viene in aiuto la libreria javax.mail . Di seguito vi mostro un esempio basilare di come controllare la posta in una casella IMAPs ( IMAP + SSL ), sistema utilizzato ad esempio da Gmail . La classe di seguito controlla, tra i messaggi non letti, quello con un certo indirizzo email e restituisce l'oggetto Message manipolabile attraverso i suoi metodi. import java.util.Properties; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; /** * Questo oggetto restituisce un Message  * dalla casella di posta IMAPs * a partire dall'indirizzo email * @author Fabrizio */ public class GetEmailMessage {  //indirizzo email da ricercare  private String indirizzoMail;  public GetEmailMessage(String indirizzoMail){

Invio Email con Java Mail

DOMANDA: Come posso inviare un'email in Java? RISPOSTA: Java mette a disposizione la libreria javax.mail che permette, con estrema facilità, di inviare un'email anche utilizzando il protocollo SMTPs (SMTP + SSL) . Nel codice seguente vi mostro come farlo con SMTPs  (ad esempio utilizzando  Gmail ) , ma basterà seguire i commenti per modificarlo in semplice SMTP (ad esempio per l'utilizzo con l'account base di Email.it ). Invio di Email con protocollo SMTPs : package invioemail; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.NoSuchProviderException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import j

Lettura da tastiera

DOMANDA: Come posso leggere un input da tastiera in Java? RISPOSTA: In Java esistono diversi modi per leggere da standard input (la nostra cara tastiera). Partiamo dal più generico (e più complesso) BufferedReader : package letturatastiera; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class LetturaDaTastiera {   public static void main(String[] args) throws IOException { InputStreamReader is = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(is); System.out.println( "Inserire una stringa:" ); String letta = br.readLine(); System.out.println( "Stringa letta: " +letta);    } } Vi chiederete: " mamma mia, tutto questo per leggere una riga da tastiera? ". Bella domanda, però c'è una motivazione: con questo codice possiamo gestire qualunque tipo di input, non solo quello da tastiera (quindi File, str

Codifica sicura della password con SHA256

DOMANDA: Come posso creare un sistema di conservazione sicura delle password nel database della mia applicazione? RISPOSTA: Il metodo più usato per conservare in maniera sicura le password consiste nel " cifrarle " con alcuni algoritmi che utilizzano funzioni non invertibili ( one-way ). Nell'esempio vi mostrerò come cifrare utilizzando SHA256 , attualmente un buon compromesso tra sicurezza e costi computazionali per un'applicazione media. In ogni caso vedremo quanto è facile modificare il tipo di cifratura utilizzata. Di seguito la classe  PwdCoder che effettua la codifica e il test della password : package codificapassword; public class PwdCoder{ public static String getEncodedPassword(String clearTextPassword) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(clearTextPassword.getBytes()); return HexString.bufferToHex(md.digest()); /