miércoles, 9 de diciembre de 2015

Crear archivos Zip Java

Hola amig@s ahora les mostrare como crear archivos zip desde java, estos archivos podrán estar con y sin contraseña así como también se podrán comprimir capetas.

Codigo:
package elrinconprograues.zip;

import java.io.File;
import java.util.ArrayList;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.UnzipParameters;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;

/**
 *
 * @author Alex Callejas
 */
public class Zip {
    
    
    public void encryptedZipFile(String pass, String ruta, String archivo) {
        try {           
            ZipFile zipFile = new ZipFile(ruta +".zip");
            ArrayList filesToAdd = new ArrayList();
            filesToAdd.add(new File(archivo));
            ZipParameters parameters = new ZipParameters();
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
            parameters.setEncryptFiles(true);
            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
            parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
            parameters.setPassword(pass);
            zipFile.addFiles(filesToAdd, parameters);
        } catch (ZipException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void zipFile(String ruta, String archivo) {
        try {           
            ZipFile zipFile = new ZipFile(ruta +".zip");
            ArrayList filesToAdd = new ArrayList();
            filesToAdd.add(new File(archivo));
            ZipParameters parameters = new ZipParameters();
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
            parameters.setEncryptFiles(false);
            zipFile.addFiles(filesToAdd, parameters);
        } catch (ZipException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void zipFolder(String ruta,String folder){
        try {
            ZipFile zipFile=new ZipFile(ruta +".zip");
            ZipParameters parameters = new ZipParameters();
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
            parameters.setEncryptFiles(false);
            zipFile.addFolder(folder, parameters);
        } catch (ZipException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void zipFolderEncrypted(String ruta,String folder,String pass){
        try {
            ZipFile zipFile=new ZipFile(ruta +".zip");
            ZipParameters parameters = new ZipParameters();
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
            parameters.setEncryptFiles(true);
            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
            parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
            parameters.setPassword(pass);
            zipFile.addFolder(folder, parameters);
        } catch (ZipException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void unzip(String zip,String ruta){
        try {
            ZipFile zipFile=new ZipFile(new File(zip));
            zipFile.extractAll(ruta);
        } catch (ZipException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void unzip(String zip,String ruta,String pass){
        try {
            ZipFile zipFile=new ZipFile(new File(zip));
            UnzipParameters unzipParameters= new UnzipParameters();
            zipFile.setPassword(pass);
            zipFile.extractAll(ruta);
        } catch (ZipException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public static void main(String[] args) {
        Zip zip=new Zip(); 
        //zip.zipFile("c:\\prueba\\pruebaZip", "c:\\prueba\\fichero.txt");
        //zip.encryptedZipFile("password", "c:\\prueba\\pruebaZipPass", "c:\\prueba\\fichero.txt");
        //zip.zipFolderEncrypted("c:\\prueba\\zipFolderPass", "c:\\prueba\\pruebaZip\\","password");
        zip.unzip("c:\\prueba\\zipFolderPass.zip", "c:\\prueba\\pruebaZip\\cc\\","password");
        //
    }
    
} 
 
 
 
Descarga código + librerías: MEGA

Enviar correos desde java

Hola amig@s esta vez les mostrare como enviar correos desde nuestra aplicación  java les enseñare como enviar correos unicamente con texto y tambien con archivos adjuntos.

Imagen:



Código:

package elrinconprograues.mail;

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 *
 * @author Alex Callejas
 */
public class SendMail {

    public static final String Username = "example@gmail.com";
    public static final String PassWord = "password";
    static Session session;
    static Properties props;

    public SendMail() {        
    }

    public Session sessionMail() {
        props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
        session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(Username, PassWord);
                    }
                });
        return session;
    }
    
    public void send(String to,String msg){
        try {
            Message message = new MimeMessage(sessionMail());
            message.setFrom(new InternetAddress(Username));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(to));
            message.setSubject("Subject");
            message.setText(msg);
            Transport.send(message);   
        } catch (MessagingException e) {
            System.out.println(e.getMessage());
        }
    }
    
    public void send(String to,String msg,String srcAttached){
        try {
            sessionMail();
            BodyPart attached = new MimeBodyPart();
            BodyPart texto = new MimeBodyPart();
            texto.setText(msg);
            MimeMultipart multiParte = new MimeMultipart();
            attached.setDataHandler(
                    new DataHandler(new FileDataSource(srcAttached)));
            attached.setFileName("File Name");
            multiParte.addBodyPart(texto);
            multiParte.addBodyPart(attached);
            Message message = new MimeMessage(sessionMail());
            message.setFrom(new InternetAddress(Username));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(to));
            message.setSubject("Subject");
            message.setContent(multiParte);
            message.setText(msg);
            message.setContent(multiParte);
            Transport.send(message);            
        } catch (MessagingException ex) {
            System.out.println(ex.getMessage());
        }        
    }
    
    public static void main(String[] args) {
        SendMail sendMail=new SendMail();
        sendMail.send("example@mail.com", "Esta es una prueba de envio de correos con java");
    }
    
}

Descarga: Mega

domingo, 6 de diciembre de 2015

Excepciones propias en Java

Hola amig@s esta vez les mostrare como crear nuestras propias excepciones en java para hacer validaciones en nuestras aplicaciones dado que el lenguaje Java proporciona las clases que manejan casi cualquier tipo de excepción. Sin embargo, podemos imaginar situaciones en la que producen excepciones que no están dentro del lenguaje Java. Para poder crear nuestras propias excepciones debemos extender una nuestra clase con Exception de la siguiente manera:

<pre class="brush:js"><br />class MiExcepcion extends Exception {
public MiExcepcion(String msg){
super(msg);
}
}
</pre>

La definición de la clase es muy simple. Se le pasa un string msg, que contiene un mensaje, en el único parámetro que tiene el constructor de la clase derivada y éste se lo pasa a la clase base mediante super.

Ejemplo:

<pre class="brush:js"><br />class PruebaMiExcepcion{
//Clase interna
static class MiExcepcion extends Exception {
public MiExcepcion(String msg){
super(msg);
}
}

public static void main(String[] args) {
try{
vacio("");
}catch (MiExcepcion mi) {
System.out.println(mi.getMessage());
}
}

public static void vacio(String str) throws MiExcepcion{
if (str.equals("")) {
throw new MiExcepcion("El campo no debe estar vacio");
}
}
}
</pre>
 

Clase MySQLConnection java

Hola amig@s en esta ocasión les traigo algo diferente a lo habitual se trata de una clase de conexión para  MySQL  con la cual se pretende simplificar este proceso que suele ser algo tedioso, esta clase cuenta ademas de métodos para realizar las operaciones de insertar, modificar, eliminar y consultar a MySQL desde una aplicación java:

Código:

import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class MySQLConnection { String userName = "root"; String password = "root"; String url = "jdbc:mysql://localhost/"; String urlDriver = "com.mysql.jdbc.Driver"; String database = "database"; Connection con; Statement st; ResultSet rs; /** * constructor vacio * @usage MySQLConnection connect = new MySQLConnection(); */ public MySQLConnection() { } /** * @return retorna la conexion a la base de datos * @use Statement st = connect.OpenConnection().createStatement(); */ public Connection OpenConnection() { con = null; try { Class.forName(urlDriver).newInstance(); con = DriverManager.getConnection(url + database, userName, password); System.out.println("connect"); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) { System.out.println(e.getMessage()); } return con; } /** * * @use connect.CloseConnection(connect.con) */ public void CloseConnection() { try { con.close(); System.out.println("close connection"); } catch (SQLException e) { System.out.println(e.getMessage()); } } /** * * @param con cierra la conexion a la base de datos * @use connect.CloseConnection(connect.con) */ public void CloseConnection(Connection con) { try { con.close(); System.out.println("close connection"); } catch (SQLException e) { System.out.println(e.getMessage()); } } /** * @param sql query para un select * @return rs retorno de la consulta efectuada caso contrario retorna null * @use */ public ResultSet executeQuery(String sql) { try { st = OpenConnection().createStatement(); rs = st.executeQuery(sql); return rs; } catch (Exception e) { System.out.println(e.getMessage()); } return null; } /** * * @param sql query para un select * @return rs retorno de la consulta efectuada caso contrario retorna null */ public boolean executeUpdate(String sql) { try { st = OpenConnection().createStatement(); rs = st.executeQuery(sql); return true; } catch (Exception e) { System.out.println(e.getMessage()); } return false; } /** * * @param pstm query para un select * @return rs retorno de la consulta efectuada caso contrario retorna null */ public ResultSet PreparedStatementExecuteQuery(PreparedStatement pstm) { try { rs = pstm.executeQuery(); return rs; } catch (Exception e) { System.out.println(e.getMessage()); } return null; } /** * * @param pstm query para un select * @return rs retorno de la consulta efectuada caso contrario retorna null */ public boolean PreparedStatementExecuteUpdate(PreparedStatement pstm) { try { pstm.executeUpdate(); return true; } catch (Exception e) { System.out.println(e.getMessage()); } return false; } /** * * @param sql query para crear un PreparedStatement para agregar los datos * @return rs retorno de la consulta efectuada caso contrario retorna null */ public PreparedStatement create(String sql){ try { PreparedStatement pstm=OpenConnection().prepareStatement(sql); return pstm; } catch (SQLException ex) { System.out.println(e.getMessage()); } return null; } }
Ejemplo de uso: Este es un pequeño ejemplo de un login utilizando dicha clase.

import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.sql.PreparedStatement; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLException; public class Operations { Statement st; ResultSet rs; MySQLConnection mysqlconnect; PreparedStatement pstm; public Operations() { mysqlconnect = new MySQLConnection(); } public void insertUser(String user, String password, int accessLevel) { try { pstm = mysqlconnect.create("insert into usuario values(?,?,?)"); pstm.setString(1, user); pstm.setString(2,password); pstm.setInt(3, accessLevel); mysqlconnect.PreparedStatementExecuteUpdate(pstm); mysqlconnect.CloseConnection(mysqlconnect.con); } catch (SQLException | NoSuchAlgorithmException | UnsupportedEncodingException ex) { System.out.println("Error to insert: " + ex.getMessage()); } } public String getPassword(String user) { String pass = null; try { pstm = mysqlconnect.create("select password from usuario where user=?"); pstm.setString(1, user); rs = mysqlconnect.PreparedStatementExecuteQuery(pstm); rs.next(); pass = rs.getString(1); rs.close(); mysqlconnect.CloseConnection(); } catch (SQLException ex) { System.out.println("user not found: "+ex.getMessage()); } return pass; } }

viernes, 25 de septiembre de 2015

Buscar y Mostrar una consulta en una JTable con Java y MySQL

Hola amig@s en esta ocacion (despues de un largo tiempo c: ) les mostrare como hacer una busqueda en una base de datos MySQL por coincidencia de caracteres y mostrarla en una JTable de dos maneras diferentes lo primero sera crear nuestra clase Conexion la cual sera igual para ambas formas:

Conexion.java
package elrinconprograues.mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Conexion {

    String userName = "root";
    String password = "root";
    String url = "jdbc:mysql://localhost/";
    String urlDriver = "com.mysql.jdbc.Driver";
    String database = "busqueda";
    private Connection con;
    Statement st;
    ResultSet rs;

    public Conexion() {

    }

    public void abrirConexion() {
        try {
            Class.forName(urlDriver).newInstance();
            con = DriverManager.getConnection(url + database, userName, password);
            System.out.println("Conexión a la BD");
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
            System.out.println("Error en conexion ");
            System.out.println(e.getMessage());
        }
    }

    public void cerrarConexion() {
        try {
            con.close();
            System.out.println("Conexión cerrada");
        } catch (SQLException e) {
            System.out.println("Error al cerrar conexión");
        }
    }
}

Forma #1

Lo primero que haremos sera crear 2 Arraylist globales en nuestra clase Conexion (o crear segun sean necesarios) dado que en este ejemplo tengo una tabla llamada persona con 2 campos el nombre y el otro para el apellido.
ArrayList nombre = new ArrayList();
ArrayList apellido = new ArrayList()

Ahora crearemos un metodo llamado busquedaPersona que recibira como parametro un String:
public void busquedaPersona(String bsq) {
        abrirConexion();
        nombre.clear();
        apellido.clear();
        try {
            st = con.createStatement();
            rs = st.executeQuery("select nombre,apellido from persona where nombre like '"+bsq+"%'");
            while (rs.next()) {
                nombre.add(rs.getString("nombre"));
                apellido.add(rs.getString("apellido"));
            }
            cerrarConexion();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

Con esto terminamos nuestra clase Conexion que quedaria de la siguiente manera:
package elrinconprograues.mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class Conexion {

    String userName = "root";
    String password = "root";
    String url = "jdbc:mysql://localhost/";
    String urlDriver = "com.mysql.jdbc.Driver";
    String database = "busqueda";
    private Connection con;
    Statement st;
    ResultSet rs;
    ArrayList nombre = new ArrayList();
    ArrayList apellido = new ArrayList();

    public Conexion() {

    }

    public void abrirConexion() {
        try {
            Class.forName(urlDriver).newInstance();
            con = DriverManager.getConnection(url + database, userName, password);
            System.out.println("Conexión a la BD");
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
            System.out.println("Error en conexion ");
            System.out.println(e.getMessage());
        }
    }

    public void cerrarConexion() {
        try {
            con.close();
            System.out.println("Conexión cerrada");
        } catch (SQLException e) {
            System.out.println("Error al cerrar conexión");
        }
    }

    public void busquedaPersona(String bsq) {
        abrirConexion();
        nombre.clear();
        apellido.clear();
        try {
            st = con.createStatement();
            rs = st.executeQuery("select nombre,apellido from persona where nombre like '"+bsq+"%'");
            while (rs.next()) {
                nombre.add(rs.getString("nombre"));
                apellido.add(rs.getString("apellido"));
            }
            cerrarConexion();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Por lo que continuaremos con nuestro JFrame el cual contendra un JTextField, un JButton y una JTable Primero crearemos una instancia de nuestra clase Conexion
Conexion con;

Y tambien una instancia de DefaultTableModel para nuestra tabla:
DefaultTableModel modelo;

Ahora las inicializamos en nuestro constructor y asignamos el DefaultTableModel a nuestra tabla:
public Busqueda() {
        initComponents();
        con=new Conexion();
        modelo = new DefaultTableModel();
        modelo = (DefaultTableModel) jTable1.getModel();
        jTable1.setModel(modelo);
    }

Tambien crearemos un metodo para borrar las filas de nuestra tabla cada vez que realicemos una busqueda:
 public void borrarTabla(){
        for (int i = 0; i < modelo.getRowCount();i++) {
            modelo.removeRow(i);
        }
    }

Luego crearemos el evento ActionPerformed en nuestro boton para realizar la busqueda y dentro de el llamaremos a nuestro metodo busquedaPersona de nuestra Clase Conexion y tambien crearemos un for con el cual llenaremos nuestra tabla con los datos de los ArraryList:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
      con.busquedaPersona(jTextField1.getText());
      borrarTabla();
        for (int i = 0; i < con.nombre.size(); i++) {
            modelo.addRow(new Object[]{con.nombre.get(i),con.apellido.get(i)});            
        }
}

Con esto estaria completa la primer forma de hacer una busqueda en MySQL.

 Forma #2

 Para nuestra siguiente forma la Clase Conexion seria practicamente la misma con la unica diferencia que no necesitaremos los ArrayList y nuestro metodo busquedaPersona no solo recibira un String como parametro sino que tambien reibira el DefaultTableModel de nuestra tabla por lo que quedaria de la siguiente forma:
package elrinconprograues.mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.table.DefaultTableModel;

public class Conexion {

    String userName = "root";
    String password = "root";
    String url = "jdbc:mysql://localhost/";
    String urlDriver = "com.mysql.jdbc.Driver";
    String database = "busqueda";
    private Connection con;
    Statement st;
    ResultSet rs;

    public Conexion() {

    }

    public void abrirConexion() {
        try {
            Class.forName(urlDriver).newInstance();
            con = DriverManager.getConnection(url + database, userName, password);
            System.out.println("Conexión a la BD");
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
            System.out.println("Error en conexion ");
            System.out.println(e.getMessage());
        }
    }

    public void cerrarConexion() {
        try {
            con.close();
            System.out.println("Conexión cerrada");
        } catch (SQLException e) {
            System.out.println("Error al cerrar conexión");
        }
    }
    
    public void busquedaPersona(String bsq, DefaultTableModel modelo) {
        abrirConexion();
        try {
            st = con.createStatement();
            rs = st.executeQuery("select nombre,apellido from persona where nombre like '"+bsq+"%'");
            while (rs.next()) {
                modelo.addRow(new Object[]{rs.getString("nombre"),rs.getString("apellido")});
            }
            cerrarConexion();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Ahora en el JFrame especificamente el ActionPerformed del boton quedaria de la siguiente manera:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
      borrarTabla();
      con.busquedaPersona(jTextField1.getText(), modelo);
}