Warning: Cannot modify header information - headers already sent by (output started at /home3/fvqjwuzk/public_html/blog/wp-content/plugins/devformatter/devformatter.php:1) in /home3/fvqjwuzk/public_html/blog/wp-includes/feed-rss2.php on line 8
Developando.com » Java http://developando.com/blog Recursos para desarrolladores como nosotros Sun, 24 Apr 2016 22:57:33 +0000 es-ES hourly 1 http://wordpress.org/?v=4.1.19 Instalación Java 8 en Linux Mint http://developando.com/blog/instalacion-java-8-linux http://developando.com/blog/instalacion-java-8-linux#comments Tue, 26 Jan 2016 10:49:39 +0000 http://developando.com/blog/?p=3204 Instalación de Java 8 La instalación de Java 8 es muy sencilla, a continuación te detallamos los pasos para completarla con éxito: En primer lugar lo que vamos a realizar es la descarga del fichero empaquetado correspondiente. Esta descarga se puede hacer desde la web de Oracle, sin embargo, de esta manera evitamos la aceptación […]

The post Instalación Java 8 en Linux Mint appeared first on Developando.com.

]]>
Instalación de Java 8

La instalación de Java 8 es muy sencilla, a continuación te detallamos los pasos para completarla con éxito:

En primer lugar lo que vamos a realizar es la descarga del fichero empaquetado correspondiente. Esta descarga se puede hacer desde la web de Oracle, sin embargo, de esta manera evitamos la aceptación de licencia.

# cd /opt
#  wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u72-b15/jdk-8u72-linux-x64.tar.gz
# tar xvf jdk-8u72-linux-x64.tar.gz

 instalación de java 8 con alternatives

Una vez realizada la descarga y desempaquetado del fichero en el directorio opt realizamos los siguientes pasos:

# sudo update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_72/bin/java 2
# sudo update-alternatives --config java

Cuando ejecutemos update-alternatives nos mostrará un menú textual a través del cual elegir la configuración de java que queremos usar en nuestro sistema. La versión actual activa estará marcada con un asterisco en la parte de la izquierda.

Existen 4 opciones para la alternativa java (que provee /usr/bin/java).

 Selección Ruta Prioridad Estado
------------------------------------------------------------
 0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1073 modo automático
* 1 /opt/jdk1.8.0_72/bin/java 2 modo manual
 2 /usr/java/jdk1.6.0_45/bin/java 100 modo manual
 3 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 modo manual
 4 /usr/lib/jvm/java-8-oracle/jre/bin/java 1073 modo manual

Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección: 2

 comprobar la instalación de java

Finalmente para comprobar que hemos realizado bien la instalación de java 8 basta con que escribamos en la consola

# java −version

java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72−b15)
Java HotSpot(TM) 64−Bit Server VM (build 25.72−b15, mixed mode)

 En resumen

Como véis es muy sencillo instalar java 8 en nuestro sistema. Cualquier duda o problema no dudes en escribir un comentario.

The post Instalación Java 8 en Linux Mint appeared first on Developando.com.

]]>
http://developando.com/blog/instalacion-java-8-linux/feed 0
Java fuentes adicionales generación PDF con JasperReports http://developando.com/blog/java-fuentes-adicionales-generacion-pdf-jasperreports http://developando.com/blog/java-fuentes-adicionales-generacion-pdf-jasperreports#comments Mon, 27 Apr 2015 06:43:48 +0000 http://developando.com/blog/?p=3132 En este tutorial vamos a ver cómo añadir todas las fuentes que necesitamos para poder gerenar PDFs desde Java medienta la librería de “jasperreports”. Para la generación de PDFs desde Java vamos a utilizar la librería “jasperreports-6.0.4.jar” que se puede incluir fácilmente en un proyecto maven añadiendo la siguiente dependencia: <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.0.4</version></dependency> Esto […]

The post Java fuentes adicionales generación PDF con JasperReports appeared first on Developando.com.

]]>
En este tutorial vamos a ver cómo añadir todas las fuentes que necesitamos para poder gerenar PDFs desde Java medienta la librería de “jasperreports”.

Para la generación de PDFs desde Java vamos a utilizar la librería “jasperreports-6.0.4.jar” que se puede incluir fácilmente en un proyecto maven añadiendo la siguiente dependencia:

  1. <dependency>
  2. <groupId>net.sf.jasperreports</groupId>
  3. <artifactId>jasperreports</artifactId>
  4. <version>6.0.4</version>
  5. </dependency>

Esto incluirá en nuestro proyecto una libraría con el nombre “jasperreports-6.0.4.jar”. También se puede añadir una librería adicional de jasperreports que contiene una extensión con diferentes fuentes utilizando la siguiente dependencia en maven:

  1. <dependency>
  2. <groupId>net.sf.jasperreports</groupId>
  3. <artifactId>jasperreports-fonts</artifactId>
  4. <version>6.0.0</version>
  5. </dependency>

Con estas dos librerías en nuestro proyecto podremos crear informes en PDF pero veremos que si utilizamos alguna fuentes por ejemplo en negrita, en el PDF que se genera no se verán estos caracteres en negrita, sino que serán impresos con la fuente por defecto de jasperReports.

Añadir nuevas fuentes

En este tutorial vamos a añadir dos nuevas fuentes para “Arial” y “Arial bold”, que nos permitirá poder generar informes utilizando la fuente arial normal y negrita. Para ello lo que vamos a generar es una nueva librería en la que incluiremos los ficheros de las fuentes y un fichero XML con el “índice” de fuentes que se han incluido.

1.- Crear proyecto Eclipse

Creamos un proyecto Java nuevo en Eclipse y en la carpeta raíz del proyecto vamos a crear el fichero de propiedades que se necesita para configurar la nuevas fuentes de JasperReports. Este fichero se debe llamar “jasperreports_extension.properties“, y tendrá un contenido como el siguiente:

  1. net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
  2. net.sf.jasperreports.extension.simple.font.families.myfamily=fonts/listado-fuentes.xml

De las líneas anteriores hay que fijarse en el nombre del fichero donde se incluirán las diferentes familias de fuentes que se van a añadir, en nuestro ejemplo se llama “listado-fuentes.xml“.

2.- Incluir fichero fuentes (.ttf)

El siguiente paso es incluir en el proyecto los ficheros “.ttf” de cada una de las fuentes que queramos añadir. Para ello creamos una nueva carpeta con el nombre “fonts” y añadimos en ella cada uno de estos ficheros, en nuestro ejemplo añadiremos los ficheros “arial.ttf” y “arialbd.ttf”.

En esta misma carpeta “fonts” debemos crear el fichero con el nombre “listado-fuentes.xml” con el listado de todas las familias de fuentes a incluir, en nuestro caso la familia sera “arial” pero añadimos tanto la fuente normal como en negrita:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <fontFamilies>
  3. <fontFamily name="Arial">
  4. <normal><![CDATA[fonts/arial.ttf]]></normal>
  5. <bold><![CDATA[fonts/arialbd.ttf]]></bold>
  6. </fontFamily>
  7. </fontFamilies>

3.- Generación librería MisFuentes.jar

Una vez completados los pasos anteriores únicamente queda empaquetar el proyecto y generear un fichero “.jar” para añadir al proyecto java con el que se generarán los informes en PDF con la librería de JasperReports. Para esto vamos a crear un fichero “build.xml” de ant con el siguiente contenido, este fichero también lo creamos en el raíz del proyecto del Eclipse:

  1. <project name="MisFuentes" >
  2.     <target name="crear-jar">
  3.         <mkdir dir="build/jar"/>
  4.         <jar destfile="build/jar/MisFuentes.jar">
  5.             <fileset refid='files.for.jar'/>
  6.             <manifest>
  7. <attribute name='Specification-Version' value='1.0'/>
  8. <attribute name='Specification-Title' value='Mis fuentes' />
  9.     </manifest>
  10.         </jar>
  11.     </target>
  12.  
  13.     <fileset id="files.for.jar" dir=".">
  14. <include name="fonts/*"/>
  15. <include name="jasperreports_extension.properties"/>
  16.     </fileset>
  17.  
  18. </project>

Ejecutando la tarea ant que hemos llamado “crear-jar” obtendremos el fichero “MisFuentes.jar” que únicamente deberemos añadir a las librerías del proyecto Java desde el que se van a generar los informes en PDF mediante JasperReports.

Con esto ya tendemos las fuentes “Arial” disponibles en nuestros informes.

The post Java fuentes adicionales generación PDF con JasperReports appeared first on Developando.com.

]]>
http://developando.com/blog/java-fuentes-adicionales-generacion-pdf-jasperreports/feed 0
Java, Comprobar si un número está contenido en un array http://developando.com/blog/java-comprobar-si-numero-contenido-array http://developando.com/blog/java-comprobar-si-numero-contenido-array#comments Mon, 02 Mar 2015 09:05:45 +0000 http://developando.com/blog/?p=3116 Con estas línea de código Java vamos a poder comprobar si un número está contenido en un array de enteros. Partiremos de la definición de un array de enteros en Java con los posibles valores con los que vamos a trabajar: public static final int [] = {1,2,3,6,7,8,56,9,86}; Ahora comprobaremos si un número que se […]

The post Java, Comprobar si un número está contenido en un array appeared first on Developando.com.

]]>
Con estas línea de código Java vamos a poder comprobar si un número está contenido en un array de enteros.

Partiremos de la definición de un array de enteros en Java con los posibles valores con los que vamos a trabajar:

  1. public static final int [] = {1,2,3,6,7,8,56,9,86};

Ahora comprobaremos si un número que se pasa por parámetro está contenido en dicha lista. Para ello vamos a ver en el siguiente ejemplo como convertir el array en una objecto lista gracias al método “asList” de la clase “java.util.Arrays“, para poder utilizar la función “contains” incluida en la clase “java.util.List“:

  1. public boolean estaEnArray(int numero){
  2.    Arrays.asList(permitidos).contains(numero);
  3. }

Ejecutando este método obtendremos “true” si el número aparece en el listado que hemos definido en la clase, o ‘false’ si no está incluido:

  1. estaEnArray(86);// Devuelve true
  2. estaEnArray(13);// Devuelve false

The post Java, Comprobar si un número está contenido en un array appeared first on Developando.com.

]]>
http://developando.com/blog/java-comprobar-si-numero-contenido-array/feed 0
Java, convertir Date a XMLGregorianCalendar http://developando.com/blog/java-convertir-date-xmlgregoriancalendar http://developando.com/blog/java-convertir-date-xmlgregoriancalendar#comments Wed, 25 Feb 2015 08:54:33 +0000 http://developando.com/blog/?p=3109 Con este sencillo método conseguiremos convertir un objeto ‘java.util.Date‘ en otro del tipo ‘javax.xml.datatype.XMLGregorianCalendar‘: public static XMLGregorianCalendar getXmlGregorianCalendarFromDate(final Date date) throws DatatypeConfigurationException{    GregorianCalendar calendar = new GregorianCalendar();    calendar.setTime(date);    return DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);} Así de sencillo en convertir un objeto “Date” a “XMLGregorianCalendar” en Java.

The post Java, convertir Date a XMLGregorianCalendar appeared first on Developando.com.

]]>
Con este sencillo método conseguiremos convertir un objeto ‘java.util.Date‘ en otro del tipo ‘javax.xml.datatype.XMLGregorianCalendar‘:

  1. public static XMLGregorianCalendar getXmlGregorianCalendarFromDate(final Date date) throws DatatypeConfigurationException{
  2.     GregorianCalendar calendar = new GregorianCalendar();
  3.     calendar.setTime(date);
  4.     return DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);
  5. }

Así de sencillo en convertir un objeto “Date” a “XMLGregorianCalendar” en Java.

The post Java, convertir Date a XMLGregorianCalendar appeared first on Developando.com.

]]>
http://developando.com/blog/java-convertir-date-xmlgregoriancalendar/feed 0
Apache POI, leer fichero Excel desde Java http://developando.com/blog/apache-poi-leer-fichero-excel-desde-java http://developando.com/blog/apache-poi-leer-fichero-excel-desde-java#comments Tue, 24 Feb 2015 08:41:27 +0000 http://developando.com/blog/?p=3100 En este tutorial vamos a explicar cómo leer el contenido de un fichero excel desde Java utilizando la librerías de Apache POI Antes de comenzar a trabajar hay que saber si se va a leer un fichero excel con extensión “xls”, que se corresponde con ficheros excel 97 al 2007, o un fichero Excel con […]

The post Apache POI, leer fichero Excel desde Java appeared first on Developando.com.

]]>
En este tutorial vamos a explicar cómo leer el contenido de un fichero excel desde Java utilizando la librerías de Apache POI

Antes de comenzar a trabajar hay que saber si se va a leer un fichero excel con extensión “xls”, que se corresponde con ficheros excel 97 al 2007, o un fichero Excel con extensión “xlsx”, versiones mayores al 2007. En función del tipo de fichero Excel con el que vamos a trabajar deberemos utilizar unas clases u otras.

Lectura ficheros Excel 97-2007 (.xls)

Para la lectura de este tipo de ficheros excel vamos a utilizar el API de POI-HSSF. Para descargar el fichero “poi-3.11.jar” hay que acceder a la página de descargas de apache.

Una vez tenemos el fichero “poi-3.11.jar” o el correspondiente con la versión más actual lo incluimos el proyecto java. El siguiente código muestra cómo leer todas las filas de una hoja excel:

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5.  
  6. import org.apache.poi.hssf.usermodel.HSSFSheet;
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  8. import org.apache.poi.ss.usermodel.Cell;
  9. import org.apache.poi.ss.usermodel.Row;
  10.  
  11. public class LeerExcel {
  12.  
  13.     public static void main(String args[]) throws IOException{
  14. FileInputStream file = new FileInputStream(new File("C:\\prueb_excel.xls"));
  15. // Crear el objeto que tendra el libro de Excel
  16. HSSFWorkbook workbook = new HSSFWorkbook(file);
  17.  
  18. /*
  19. * Obtenemos la primera pestaña a la que se quiera procesar indicando el indice.
  20. * Una vez obtenida la hoja excel con las filas que se quieren leer obtenemos el iterator
  21. * que nos permite recorrer cada una de las filas que contiene.
  22. */
  23. HSSFSheet sheet = workbook.getSheetAt(0);
  24. Iterator<Row> rowIterator = sheet.iterator();
  25.  
  26. Row row;
  27. // Recorremos todas las filas para mostrar el contenido de cada celda
  28. while (rowIterator.hasNext()){
  29.     row = rowIterator.next();
  30.  
  31.     // Obtenemos el iterator que permite recorres todas las celdas de una fila
  32.     Iterator<Cell> cellIterator = row.cellIterator();
  33.     Cell celda;
  34.  
  35.     while (cellIterator.hasNext()){
  36. celda = cellIterator.next();
  37.  
  38. // Dependiendo del formato de la celda el valor se debe mostrar como String, Fecha, boolean, entero...
  39. switch(celda.getCellType()) {
  40. case Cell.CELL_TYPE_NUMERIC:
  41.     if( HSSFDateUtil.isCellDateFormatted(celda) ){
  42.        System.out.println(celda.getDateCellValue());
  43.     }else{
  44.        System.out.println(celda.getNumericCellValue());
  45.     }
  46.     System.out.println(celda.getNumericCellValue());
  47.     break;
  48. case Cell.CELL_TYPE_STRING:
  49.     System.out.println(celda.getStringCellValue());
  50.     break;
  51. case Cell.CELL_TYPE_BOOLEAN:
  52.     System.out.println(celda.getBooleanCellValue());
  53.     break;
  54. }
  55.     }
  56. }
  57.  
  58. // cerramos el libro excel
  59. workbook.close();
  60.     }
  61.  
  62. }

Lectura ficheros Excel (.xlsx)

Para poder trabajar con ficheros excel con extensión ‘.xlsx’ debemos añadir las siguientes librerías en nuestro proyecto java:

  • poi-3.11.jar
  • poi-ooxml-3.11.jar
  • poi-ooxml-schemas-3.11.jar
  • xmlbeans-2.6-0.jar

Tras incluir las librerías anteriores en nuestro proyecto Jata, y con el siguiente código recorreríamos todas las celdas contenidas en las primera hoja del libro excel.

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5.  
  6. import org.apache.poi.ss.usermodel.Cell;
  7. import org.apache.poi.ss.usermodel.Row;
  8. import org.apache.poi.xssf.usermodel.XSSFSheet;
  9. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  10.  
  11. public class LeerExcel {
  12.  
  13.     public static void main(String args[]) throws IOException{
  14. FileInputStream file = new FileInputStream(new File("C:\\prueb_excel.xls"));
  15. // Crear el objeto que tendra el libro de Excel
  16. XSSFWorkbook workbook = new XSSFWorkbook(file);
  17.  
  18. /*
  19. * Obtenemos la primera pestaña a la que se quiera procesar indicando el indice.
  20. * Una vez obtenida la hoja excel con las filas que se quieren leer obtenemos el iterator
  21. * que nos permite recorrer cada una de las filas que contiene.
  22. */
  23. XSSFSheet sheet = workbook.getSheetAt(0);
  24. Iterator<Row> rowIterator = sheet.iterator();
  25.  
  26. Row row;
  27. // Recorremos todas las filas para mostrar el contenido de cada celda
  28. while (rowIterator.hasNext()){
  29.     row = rowIterator.next();
  30.  
  31.     // Obtenemos el iterator que permite recorres todas las celdas de una fila
  32.     Iterator<Cell> cellIterator = row.cellIterator();
  33.     Cell celda;
  34.  
  35.     while (cellIterator.hasNext()){
  36. celda = cellIterator.next();
  37.  
  38. // Dependiendo del formato de la celda el valor se debe mostrar como String, Fecha, boolean, entero...
  39. switch(celda.getCellType()) {
  40. case Cell.CELL_TYPE_NUMERIC:
  41.     if( DateUtil.isCellDateFormatted(celda) ){
  42.        System.out.println(celda.getDateCellValue());
  43.     }else{
  44.        System.out.println(celda.getNumericCellValue());
  45.     }
  46.     break;
  47. case Cell.CELL_TYPE_STRING:
  48.     System.out.println(celda.getStringCellValue());
  49.     break;
  50. case Cell.CELL_TYPE_BOOLEAN:
  51.     System.out.println(celda.getBooleanCellValue());
  52.     break;
  53. }
  54.     }
  55. }
  56.  
  57. // cerramos el libro excel
  58. workbook.close();
  59.     }
  60.  
  61. }

The post Apache POI, leer fichero Excel desde Java appeared first on Developando.com.

]]>
http://developando.com/blog/apache-poi-leer-fichero-excel-desde-java/feed 0
Java, leer y guardar fichero desde una URL http://developando.com/blog/java-leer-guardar-fichero-desde-url http://developando.com/blog/java-leer-guardar-fichero-desde-url#comments Thu, 22 Jan 2015 11:35:36 +0000 http://developando.com/blog/?p=2977 En este tutorial de Java vamos a explicar cómo leer y almacenar en un fichero el contenido de otro fichero dada la URL donde esté publicado. Partimos de la URL donde esté alojado el fichero, por ejemplo: [crayon-59c1ffbcea79b506202815/] Mostrar en pantalla el contenido del fichero dada la URL En este ejemplo vamos a mostrar un […]

The post Java, leer y guardar fichero desde una URL appeared first on Developando.com.

]]>
En este tutorial de Java vamos a explicar cómo leer y almacenar en un fichero el contenido de otro fichero dada la URL donde esté publicado.

Partimos de la URL donde esté alojado el fichero, por ejemplo:

http://midominio.es/carpeta/10/01/2012/plantilla.txt

Mostrar en pantalla el contenido del fichero dada la URL

En este ejemplo vamos a mostrar un método que cargue un fichero dada su URL y muestre en pantalla línea a línea el contenido de dicho fichero. Para ello vamos a crear un método llamado “mostrarContenido” que dada una URL recupere un fichero y muestre el contenido en la consola:

public static void mostrarContenido(String url) throws Exception {
   URL ficheroUrl = new URL(url);
   BufferedReader in = new BufferedReader(new InputStreamReader(ficheroUrl.openStream()));

   String linea;
   while ((linea = in.readLine()) != null){
      System.out.println(linea);
   }

   in.close(); // Cerramos la conexión  
}

Descargar un fichero dada la URL

Si lo que queremos hacer es que dada una URL descarguemos el contenido del fichero y creemos un nuevo fichero (java.io.File) en Java deberemos utilizar este otro método llamado “descargarUrl”. Este método recibe por parámetro la URL donde está alojado el fichero y también la ruta y el nombre donde queremos crear el nuevo fichero:

public static void descargar(String url, String ficheroDestino) throws Exception {

   URL ficheroUrl = new URL(url);
   InputStream inputStream = ficheroUrl.openStream();			
   OutputStream outputStream = new FileOutputStream(ficheroDestino); // path y nombre del nuevo fichero creado

   byte[] b = new byte[2048];
   int longitud;

   while ((longitud = inputStream.read(b)) != -1) {
      outputStream.write(b, 0, longitud);
   }

   inputStream.close();  // Cerramos la conexión entrada
   outputStream.close(); // Cerramos la conexión salida
}

The post Java, leer y guardar fichero desde una URL appeared first on Developando.com.

]]>
http://developando.com/blog/java-leer-guardar-fichero-desde-url/feed 0
Java 7 : Leer y escribir ficheros de texto en Java http://developando.com/blog/java-7-leer-y-escribir-ficheros-de-texto http://developando.com/blog/java-7-leer-y-escribir-ficheros-de-texto#comments Mon, 15 Dec 2014 14:54:34 +0000 http://developando.com/blog/?p=2776 En Java 7 las clases más importantes para el tratamiento de ficheros de texto son: Paths y Path – Localización del fichero o nombre, no su contenido. Files - Operaciones con el contenido del fichero. StandardCharsets y Charset - Para manejar la codificación del archivo de texto. File.toPath – Método que permite interactuar con código […]

The post Java 7 : Leer y escribir ficheros de texto en Java appeared first on Developando.com.

]]>
En Java 7 las clases más importantes para el tratamiento de ficheros de texto son:

  • Paths y Path – Localización del fichero o nombre, no su contenido.
  • Files - Operaciones con el contenido del fichero.
  • StandardCharsets y Charset - Para manejar la codificación del archivo de texto.
  • File.toPath – Método que permite interactuar con código antiguo a través del nuevo API java.nio

Las siguientes clases también son usadas de manera generalizada cuando trabajamos con ficheros de texto tanto en Java 7 como en versiones anteriores:

Cuando realizamos operaciones de lectura/escritura con ficheros de texto:

  • Frecuentemente será buena idea utilizar buffering (por defecto el tamaño son 8K)
  • Siempre tendremos que tener en cuenta el manejo de excepciones de IOException y FileNotFoundException.

java 7 : Codificación de caracteres

Para realizar operaciones sobre ficheros de texto en Java 7 tenemos que tener en cuenta que esas operaciones de lectura/escritura siempre usan una codificación de caracteres de manera implícita para traducir las cadenas de bytes en texto. Aquí es donde frecuentemente nos encontramos antes el primer problema. 

Las clases FileReader y FileWriter utilizan de manera implícita la codificación de caracteres del sistema. Sin embargo, no es apropiado utilizarlo debido a los problemas que puede ocasionar usar nuestro código en diferentes sistemas operativos por ejemplo. La manera correcta es emplear aquellas clases que nos obliguen a realizar una declaración explícita de la codificación de caracteres como por ejemplo:

  1. FileInputStream fis = new FileInputStream("test.txt");
  2. InputStreamReader in = new InputStreamReader(fis, "UTF-8");
  3.  
  4. FileOutputStream fos = new FileOutputStream("test.txt");
  5. OutputStreamWriter out = new OutputStreamWriter(fos, "UTF-8");
  6.  
  7. Scanner scanner = new Scanner(file, "UTF-8");

java 7 + ejemplo 1

  1. package es.ivoto.cera.config;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.IOException;
  5. import java.nio.charset.Charset;
  6. import java.nio.charset.StandardCharsets;
  7. import java.nio.file.Files;
  8. import java.nio.file.Path;
  9. import java.nio.file.Paths;
  10. import java.util.Arrays;
  11. import java.util.List;
  12. import java.util.Scanner;
  13.  
  14. public class LeerEscribirFicheroTextoJDK7 {
  15.  
  16.   public static void main(String... aArgs) throws IOException{
  17.    LeerEscribirFicheroTextoJDK7 text = new LeerEscribirFicheroTextoJDK7();
  18.  
  19.     //Tratamiento con fichero pequeño con Java 7
  20.     List<String> lines = text.readSmallTextFile(FILE_NAME);
  21.     log(lines);
  22.     lines.add("Esta es una línea añadida desde el código.");
  23.     text.writeSmallTextFile(lines, FILE_NAME);
  24.  
  25.     //Tratamiento para ficheros grandes usando buffering
  26.     text.readLargerTextFile(FILE_NAME);
  27.     lines = Arrays.asList("Down to the Waterline", "Water of Love");
  28.     text.writeLargerTextFile(OUTPUT_FILE_NAME, lines);  
  29.   }
  30.  
  31.   final static String FILE_NAME = "C:\Temp\input.txt";
  32.   final static String OUTPUT_FILE_NAME = "C:\Temp\output.txt";
  33.   final static Charset ENCODING = StandardCharsets.UTF_8;
  34.  
  35.   //Para ficheros pequeños. Java 7
  36.  
  37.   /**
  38.    Nota: el javadoc de Files.readAllLines dice que es recomendable para pequeños ficheros.
  39.    Pero su implementación usa buffering, por lo que también es recomendable para usarlo
  40.    con ficheros de texto de mayor tamaño.
  41.   */  
  42.   List<String> readSmallTextFile(String aFileName) throws IOException {
  43.     Path path = Paths.get(aFileName);
  44.     return Files.readAllLines(path, ENCODING);
  45.   }
  46.  
  47.   void writeSmallTextFile(List<String> aLines, String aFileName) throws IOException {
  48.     Path path = Paths.get(aFileName);
  49.     Files.write(path, aLines, ENCODING);
  50.   }
  51.  
  52.   //Para ficheros grandes Java 7
  53.  
  54.   void readLargerTextFile(String aFileName) throws IOException {
  55.     Path path = Paths.get(aFileName);
  56.     try (Scanner scanner =  new Scanner(path, ENCODING.name())){
  57.       while (scanner.hasNextLine()){
  58.         //procesa cada línea del mismo modo
  59.         log(scanner.nextLine());
  60.       }      
  61.     }
  62.   }
  63.  
  64.   void readLargerTextFileAlternate(String aFileName) throws IOException {
  65.     Path path = Paths.get(aFileName);
  66.     try (BufferedReader reader = Files.newBufferedReader(path, ENCODING)){
  67.       String line = null;
  68.       while ((line = reader.readLine()) != null) {
  69.         //procesa cada línea del mismo modo
  70.         log(line);
  71.       }      
  72.     }
  73.   }
  74.  
  75.   void writeLargerTextFile(String aFileName, List<String> aLines) throws IOException {
  76.     Path path = Paths.get(aFileName);
  77.     try (BufferedWriter writer = Files.newBufferedWriter(path, ENCODING)){
  78.       for(String line : aLines){
  79.         writer.write(line);
  80.         writer.newLine();
  81.       }
  82.     }
  83.   }
  84.  
  85.   private static void log(Object aMsg){
  86.     System.out.println(String.valueOf(aMsg));
  87.   }
  88.  
  89. }

java 7 + : Ejemplo 2

Este ejemplo muestra el uso de Scanner con Java 7 para leer un archivo que contiene las líneas de datos estructurados. Un Scanner se utiliza para leer en cada línea, y un segundo Scanner se utiliza para analizar cada línea en un simple par nombre-valor. La clase Scanner sólo se utiliza para la lectura, no para la escritura.

Java 7 : Clase Scanner

Java 7 : Clase Scanner

  1. package es.ivoto.cera.config;
  2. import java.io.IOException;
  3. import java.nio.charset.Charset;
  4. import java.nio.charset.StandardCharsets;
  5. import java.nio.file.Path;
  6. import java.nio.file.Paths;
  7. import java.util.Scanner;
  8.  
  9. /**Asumimos que el fichero está codificado en UTF-8. Java 7 +. */
  10. public class LeerConScanner {
  11.  
  12.   public static void main(String... aArgs) throws IOException {
  13.     LeerConScanner parser = new LeerConScanner("C:\Temp\test.txt");
  14.     parser.processLineByLine();
  15.     log("Done.");
  16.   }
  17.  
  18.   /**
  19.    Constructor.
  20.    @param aFileName nombre completo de un fichero existente.
  21.   */
  22.   public LeerConScanner(String aFileName){
  23.     fFilePath = Paths.get(aFileName);
  24.   }
  25.  
  26.  
  27.   /** Método que invoca a {@link #processLine(String)}.  */
  28.   public final void processLineByLine() throws IOException {
  29.     try (Scanner scanner =  new Scanner(fFilePath, ENCODING.name())){
  30.       while (scanner.hasNextLine()){
  31.         processLine(scanner.nextLine());
  32.       }      
  33.     }
  34.   }
  35.  
  36.   /**
  37.    Método sobreescribible para procesar las líneas de diferentes maneras.
  38.    
  39.    <P>La implementación por defecto espera recibir pares de clave-valor separados por un '='.
  40.    Ejemplo de entradas válidas:
  41.    <tt>height = 178cm</tt>
  42.    <tt>mass =  95kg</tt>
  43.    <tt>disposition =  "grumpy"</tt>
  44.    <tt>Clave = valor</tt>
  45.   */
  46.   protected void processLine(String aLine){
  47.      Scanner scanner = new Scanner(aLine);
  48.     scanner.useDelimiter("=");
  49.     if (scanner.hasNext()){
  50.       String name = scanner.next();
  51.       String value = scanner.next();
  52.       log("Name is : " + quote(name.trim()) + ", and Value is : " + quote(value.trim()));
  53.     }
  54.     else {
  55.       log("Línea vacía o sin la estructura esperada. No se puede procesar.");
  56.     }
  57.   }
  58.  
  59.   // PRIVADO
  60.   private final Path fFilePath;
  61.   private final static Charset ENCODING = StandardCharsets.UTF_8;  
  62.  
  63.   private static void log(Object aObject){
  64.     System.out.println(String.valueOf(aObject));
  65.   }
  66.  
  67.   private String quote(String aText){
  68.     String QUOTE = "'";
  69.     return QUOTE + aText + QUOTE;
  70.   }
  71. }

Si ejecutas el ejemplo se obtendrá:

  1. Name is : 'height', and Value is : '167cm'
  2. Name is : 'mass', and Value is : '65kg'
  3. Name is : 'disposition', and Value is : '"grumpy"'
  4. Name is : 'this is the name', and Value is : 'this is the value'
  5. Done.

 

The post Java 7 : Leer y escribir ficheros de texto en Java appeared first on Developando.com.

]]>
http://developando.com/blog/java-7-leer-y-escribir-ficheros-de-texto/feed 0
Garbage Collector: Intepretando su salida http://developando.com/blog/garbage-collector-intepretando-su-salida http://developando.com/blog/garbage-collector-intepretando-su-salida#comments Thu, 11 Dec 2014 14:52:21 +0000 http://developando.com/blog/?p=2747 Si tuviste la suerte de acudir a la charla de @alotor en el Codemotion 2014, descubrimos muchas maneras de monitorizar la actividad del Garbage Collector y obtener un log de salida que poder analizar para tratar de detectar problemas de rendimiento.  Configurar el Garbage Collector para que nos de esta salida es bastante sencillo. En mi […]

The post Garbage Collector: Intepretando su salida appeared first on Developando.com.

]]>
Si tuviste la suerte de acudir a la charla de @alotor en el Codemotion 2014, descubrimos muchas maneras de monitorizar la actividad del Garbage Collector y obtener un log de salida que poder analizar para tratar de detectar problemas de rendimiento. 

Configurar el Garbage Collector para que nos de esta salida es bastante sencillo. En mi caso el entorno es el siguiente:

Eclipse Kepler + Java 7 + Tomcat 7

He modificado la configuración de arranque del Tomcat para añadirle los siguientes parámetros:

Garbage Collector Launch Configuration

Con estos parámetros la salida que obtenemos es la siguiente salida en nuestra consola:

  1. [GC [PSYoungGen: 72686K->5110K(72704K)] 86900K->32995K(159744K), 0.0176918 secs] [Times: user=0.03 sys=0.02, real=0.02 secs]
  2. [GC [PSYoungGen: 72694K->17904K(148992K)] 100579K->47708K(236032K), 0.0199841 secs] [Times: user=0.03 sys=0.02, real=0.02 secs]
  3. [GC [PSYoungGen: 148976K->21989K(153088K)] 178780K->70001K(240128K), 0.0362913 secs] [Times: user=0.11 sys=0.00, real=0.03 secs]
  4. [GC [PSYoungGen: 153061K->34787K(283136K)] 201073K->100969K(370176K), 0.0318076 secs] [Times: user=0.08 sys=0.00, real=0.04 secs]
  5. [Full GC [PSYoungGen: 34787K->0K(283136K)] [ParOldGen: 66182K->49354K(117248K)] 100969K->49354K(400384K) [PSPermGen: 18093K->18089K(36352K)], 0.1232627 secs] [Times: user=0.34 sys=0.00, real=0.11 secs]
  6. [GC [PSYoungGen: 248320K->48632K(296960K)] 297674K->103225K(414208K), 0.0427160 secs] [Times: user=0.11 sys=0.01, real=0.06 secs]
  7. [GC [PSYoungGen: 296952K->58861K(387072K)] 351545K->127707K(504320K), 0.0549142 secs] [Times: user=0.11 sys=0.03, real=0.05 secs]
  8. [GC [PSYoungGen: 387053K->36470K(401920K)] 455899K->142959K(519168K), 0.0577764 secs] [Times: user=0.16 sys=0.00, real=0.06 secs]

garbage collector wtf

Pues si esta es la cara que se te queda al ver lo que el Garbage Collector escupe en tu consola estás leyendo el post adecuado. Como decía, en el Codemotion @alotor nos enseño una diapo en la que al menos pudimos saber relacionar las trazas con los tipos de procesos del Garbage Collector (recolección de jóvenes y STW stop the world) como se ve en la siguiente imagen:

Garbage-Collector

Dado que es un tema extenso se tocaron unos cuantos temas más sin profundizar en demasía aunque dejando el camino trillado para poder seguir investigando sobre el Garbage Collector.

Vamos a analizar el detalle de la salida con el siguiente ejemplo para ver qué está queriendo decir el Garbage Collector:

  1. [GC [PSYoungGen: 387053K->36470K(401920K)] 455899K->142959K(519168K), 0.0577764 secs] [Times: user=0.16 sys=0.00, real=0.06 secs]

Descripción de la salida del Garbage Collector

[GC [PSYoungGen: 387053K->36470K(401920K)]  

GC indica el que el Garbage Collector que ha entrado en acción no es un [Full GC] ya que en ese caso aparecería ese tipo indicado como se puede ver en el ejemplo de más arriba. 

PSYoungGen nos dice que tipo de collector se emplea. PSYoungGen es el recolector de jóvenes

387053K indica el tamaño de la región de jóvenes antes de la ejecución del Garbage Collector.

36470K indica valor posterior a la ejecución del GC que ocupa la región de jóvenes. Cuánto menor sea su número mejor puesto que significará que ha liberado más espacio de memoria.

401920K valor máximo de memoria que puede ocupar la región de jóvenes.

455899K->142959K(519168K), 0.0577764 secs]

455899K tamaño total ocupado en el heap antes de la ejecución del Garbage Collector.

142959K tamaño resultante de la ejecución de GC.

519168K valor del tamaño máximo del heap.

0.0577764 secs tiempo invertido en realizar la operación de liberación de espacio de memoria heap.

conclusiones

Como hemos podido ver es mucho más sencillo ahora entender un poco qué es lo que ocurre y hace el Garbage Collector cuando añadimos los parámetros necesarios para tracear su actividad. 

¡ Todos los comentarios son bien recibidos !

The post Garbage Collector: Intepretando su salida appeared first on Developando.com.

]]>
http://developando.com/blog/garbage-collector-intepretando-su-salida/feed 0
Spring ha muerto … ¡larga vida a Spring! http://developando.com/blog/spring-boot-codemotion-2104 http://developando.com/blog/spring-boot-codemotion-2104#comments Thu, 27 Nov 2014 14:27:41 +0000 http://developando.com/blog/?p=2710 Si no pudiste asistir a la charla o no pudiste pasar por el Codemotion 2014, esta fue sin duda una de las mejores charlas. Las slides de la charla también están accesibles aquí: http://www.slideshare.net/ilopmar/spring-ha-muerto-larga-vida-a-spring-boot

The post Spring ha muerto … ¡larga vida a Spring! appeared first on Developando.com.

]]>
Si no pudiste asistir a la charla o no pudiste pasar por el Codemotion 2014, esta fue sin duda una de las mejores charlas.

Las slides de la charla también están accesibles aquí:

http://www.slideshare.net/ilopmar/spring-ha-muerto-larga-vida-a-spring-boot

The post Spring ha muerto … ¡larga vida a Spring! appeared first on Developando.com.

]]>
http://developando.com/blog/spring-boot-codemotion-2104/feed 0
OutOfMemoryError : Java Heap Space – Eclipse + Tomcat http://developando.com/blog/java-lang-outofmemoryerror http://developando.com/blog/java-lang-outofmemoryerror#comments Wed, 19 Nov 2014 11:48:51 +0000 http://developando.com/blog/?p=2639 ¿Cuántas veces te has encontrado con un OutOfMemoryError en tu consola? ¿cuánto tiempo has gastando navegando buscando la solución? Deja de buscar y sigue estos sencillos pasos para aumentar el Heap de tu servidor. Al igual que vimos en el caso del timeout por el tiempo de arranque de nuestro Tomcat este tipo de error […]

The post OutOfMemoryError : Java Heap Space – Eclipse + Tomcat appeared first on Developando.com.

]]>
¿Cuántas veces te has encontrado con un OutOfMemoryError en tu consola? ¿cuánto tiempo has gastando navegando buscando la solución? Deja de buscar y sigue estos sencillos pasos para aumentar el Heap de tu servidor.

Al igual que vimos en el caso del timeout por el tiempo de arranque de nuestro Tomcat este tipo de error parece que es más frecuente de lo que desaría cualquiera.

Di ‘nunca más’ la próxima vez que veas un outofmemoryerror

Vamos a nuestros servidores y hacemos doble clic sobre el que queramos actuar.

OutOfMemoryError Never

OutOfMemoryError – paso 1

En la pantalla que nos aparece hacemos clic sobre Open launch configuration

OutOfMemoryError-paso2

OutOfMemoryError

 Haz clic a la pestaña de Arguments, en el apartado de VM Arguments podrás establecer el tamaño del heap de acuerdo a lo siguiente:

-Xms<size> - Set <Tamaño inicial del heap>
-Xmx<size> - Set <Tamaño máximo del heap>

OutOfMemoryError

OutOfMemoryError

En nuestro caso hemos declarado un heap inicial de 512 megas y un heap máximo de 1024 megas (1 Gb vaya).

¡ Y listo !

PD: Si esto ha solucionado tus problemas me alegro, sin embargo, en la mayoría de ocasiones encontrarnos con este error será un indicativo de que algo no está marchando bien en nuestro desarrollo. Siempre se podrá escalar dotando de mayor memoria al desarrollo para evitarlo pero esto no se puede mantener de manera infinita en el tiempo. Trata de optimizar tu código, si tienes tiempo para ello o cuando lo tengas.

The post OutOfMemoryError : Java Heap Space – Eclipse + Tomcat appeared first on Developando.com.

]]>
http://developando.com/blog/java-lang-outofmemoryerror/feed 0

Last updated by at .