<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux, Java y programación &#187; ejemplos</title>
	<atom:link href="http://casidiablo.net/tag/ejemplos/feed/" rel="self" type="application/rss+xml" />
	<link>http://casidiablo.net</link>
	<description>Blog de Java, Programación y Linux</description>
	<lastBuildDate>Mon, 08 Mar 2010 03:41:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Obtener información del sistema [memoria disponible, %CPU, espacio en disco] en Java</title>
		<link>http://casidiablo.net/capturar-informacion-sistema-operativo-java/</link>
		<comments>http://casidiablo.net/capturar-informacion-sistema-operativo-java/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 22:00:33 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[cpu]]></category>
		<category><![CDATA[disco]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicio]]></category>
		<category><![CDATA[espacio]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[informacion]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[memoria]]></category>
		<category><![CDATA[ram]]></category>
		<category><![CDATA[sistema]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3382</guid>
		<description><![CDATA[

En esta guía aprenderemos a obtener información de los recursos sistema en Java, usando la librería Sigar. Los datos que podremos extraer son los siguientes:

Información de la CPU.
Espacio en disco disponible.
Cantidad de espacio que consume un directorio en específico.
Cantidad de memoria RAM disponible y en uso.
Información de red (dirección IP, nombre de la NIC, puertos [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fcapturar-informacion-sistema-operativo-java%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Obtener%20informaci%C3%B3n%20del%20sistema%20%5Bmemoria%20disponible%2C%20%25CPU%2C%20espacio%20en%20disco%5D%20en%20Java%22%20%7D);"></div>
<p style="text-align: justify;">En esta guía aprenderemos a obtener información de los recursos sistema en Java, usando la librería Sigar. Los datos que podremos extraer son los siguientes:</p>
<ul style="text-align: justify;">
<li><strong>Información de la CPU.</strong></li>
<li><strong>Espacio en disco disponible.</strong></li>
<li>Cantidad de espacio que consume un directorio en específico.</li>
<li><strong>Cantidad de memoria RAM disponible y en uso.</strong></li>
<li>Información de red (dirección IP, nombre de la NIC, puertos abiertos, tablas de enrutamiento, etc.)</li>
<li>Información de los procesos que se están ejecutando en el sistema.</li>
<li>Asignación de <a href="http://casidiablo.net/obtener-variables-entorno-informacion-sistema-java/">variables de entorno</a>.</li>
<li><strong>Uptime, o cantidad de tiempo que el equipo ha estado encendido.</strong></li>
<li><strong>Nombre y versión del sistema operativo.</strong></li>
<li>Usuarios logueados actualmente.</li>
</ul>
<p style="text-align: justify;">Resaltadas en negrita está la información en la que nos concentraremos en el ejemplo. Pero antes aclaremos un poco que es Sigar: el API de Sigar nos proporciona una serie de métodos que nos permiten obtener información del sistema operativo; consta de una librería de Java (.jar) y otras librerías nativas específicas para cada sistema operativo soportado (<code>libsigar-amd64-linux.so</code>, para Linux de 64 bits o <code>sigar-x86-winnt.dll</code> para Windows de 32 bits, por poner un ejemplo).</p>
<p style="text-align: justify;">Teniendo esto en cuenta, para hacer funcionar dicha API en una de nuestras aplicaciones, bastaría con tener el archivo .jar y la librería específica de nuestro sistema operativo. En el desarrollo del ejemplo se usará Eclipse y, aunque se explicará cómo añadir las librerías en el proyecto, se da por conocido el funcionamiento del flag <code>--classpath</code> de los comandos <code>javac</code> y <code>java</code> (obligatorio si no se usa ningún IDE).</p>
<h3>El resultado&#8230;</h3>
<p style="text-align: justify;">Siempre pongo primero el resultado ya que nos aclara la visión de hacia donde vamos, y de paso saber si lo que está aquí es lo que buscamos. Esta es la salida del programa en mi Gentoo Linux:</p>
<p><span id="more-3382"></span></p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: plain;">====Informacion del sistema====
Descripcion del SO	Gentoo 2.1.6
Nombre del SO		Linux
Arquitectura del SO	x86_64
Version del SO		2.6.31-gentoo
Nivel de parches	unknown
Fabricante		Gentoo
Version SO		2.1.6
Encendido durante:	6:15

==== Informacion de la CPU ====
Fabricante:		Intel
Modelo			Core(TM)2 Duo CPU     T5750  @ 2.00GHz
Mhz			1994
Total CPUs		2
CPUs fisiscas		1
Nucleos por CPU		2
Tamanio cache		2048

Consumo de CPU 0	22.0%
Consumo de CPU 1	2.0%
Consumo total de CPU	6.0%

====Informacion del sistema de archivos====

dispos.|total|usado|disponible|%uso|dir|tipo

/dev/root|24042944|10698228|12123376|47%|/|ext4
/dev/sda1|175457764|155825380|10719932|94%|/home|ext3

====Informacion de la memoria====
Cantidad de memoria RAM: 3968MB
Total: 4056984
Usada: 2307076
Disponible: 1749908
Memoria SWAP total: 1052248
Memoria SWAP usada: 0
Memoria SWAP libre: 1052248</pre>
<p><!--INFOLINKS_ON--></p>
<h3>Descargar Sigar</h3>
<p style="text-align: justify;">Puedes descargar Sigar de la página oficial: <a href="http://support.hyperic.com/display/SIGAR/Home">http://support.hyperic.com/display/SIGAR/Home</a> que incluye además ejemplos para Java, Perl, C, Python, Ruby, y más. Puedes además descargar el código fuente que se encuentra licenciado bajo la GPL2.</p>
<h3>Creación del proyecto en Eclipse</h3>
<p style="text-align: justify;">Voy a usar este ejemplo para además enseñar a manipular librerías externas en Eclipse; si lo que te interesa es conocer el código, puedes saltarte a dicha sección directamente.</p>
<p style="text-align: justify;">Creamos un proyecto en Eclipse llamado InfoSistema:</p>
<p style="text-align: center;"><img class="size-full wp-image-3385 aligncenter" title="eclipse1" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/10/eclipse1.png" alt="eclipse1" width="457" height="381" /></p>
<p style="text-align: justify;">Ahora creamos una carpeta dentro del proyecto llamada lib, en donde guardaremos las librerías de Sigar (.jar, .so, .dll, etc.):</p>
<p style="text-align: center;"><img class="size-full wp-image-3386 aligncenter" title="eclipse2" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/10/eclipse2.png" alt="eclipse2" width="600" height="372" /></p>
<p style="text-align: justify;">Ahora descomprimimos el archivo que descargamos de Sigar, y copiamos los archivos que se encuentran en la carpeta <code>sigar-bin/lib</code> a la carpeta <code>lib</code> de nuestro proyecto. En mi caso la copia la hice con este comando:</p>
<div class="consola">cp sigar-bin/lib/* /home/compartido/workspace/InfoSistema/lib/</div>
<p style="text-align: justify;">Cabe resaltar que bastaría con copiar el archivo llamado <code>sigar.jar</code> y la librería del sistema donde vamos a correr nuestro programa (<code>libsigar-amd64-linux.so</code> en mi caso).</p>
<p style="text-align: justify;">Una vez hecha la copia, hacemos clic en la raiz del proyecto en Eclipse y presionamos F5 para actualizar el árbol de ficheros; de esta manera Eclipse sabrá de los nuevos archivos que hemos copiado. Y lo que haremos a continuación será enlazar la librería <code>sigar.jar</code> a nuestro proyecto, para lo cual hacemos clic derecho en el mismo, <em>Build Path</em> -&gt; <em>Configure Build Path&#8230;</em></p>
<p style="text-align: center;"><img class="size-full wp-image-3388 aligncenter" title="eclipse3" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/10/eclipse3.png" alt="eclipse3" width="600" height="345" /></p>
<p style="text-align: justify;">En la ventana que aparece, seleccionaremos la pestaña <em>Libraries</em> y hacemos clic en el botón <em>Add JARs&#8230;</em> Seleccionamos el archivo <code>sigar.jar</code> y hacemos clic en <em>OK</em>:</p>
<p style="text-align: center;"><img class="size-full wp-image-3389 aligncenter" title="eclipse4" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/10/eclipse4.png" alt="eclipse4" width="373" height="336" /></p>
<p style="text-align: justify;">Ahora que la librería se encuentra añadida, podemos utilizar el API que Sigar nos ofrece. ¡Pasemos entonces al código!</p>
<h3>Información del sistema&#8230;</h3>
<p style="text-align: justify;">La siguiente clase nos permite obtener información del sistema operativo, como el nombre, la versión, la arquitectura, etc. Creamos una nueva clase llamada <code>InfoSO</code> con el siguiente código:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import org.hyperic.sigar.OperatingSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

public class InfoSO {
	private Sigar sigar = new Sigar();
	public void imprimirInfo() {
		OperatingSystem sys = OperatingSystem.getInstance();
		System.out.println(&quot;Descripcion del SO\t&quot; + sys.getDescription());
		System.out.println(&quot;Nombre del SO\t\t&quot; + sys.getName());
		System.out.println(&quot;Arquitectura del SO\t&quot; + sys.getArch());
		System.out.println(&quot;Version del SO\t\t&quot; + sys.getVersion());
		System.out.println(&quot;Nivel de parches\t&quot; + sys.getPatchLevel());
		System.out.println(&quot;Fabricante\t\t&quot; + sys.getVendor());
		System.out.println(&quot;Version SO\t\t&quot; + sys.getVendorVersion());
		try {
			imprimirUptime();
		} catch (SigarException e) {
			e.printStackTrace();
		}
	}
	public void imprimirUptime() throws SigarException {
		double uptime = sigar.getUptime().getUptime();
		String resultado = &quot;&quot;;
		int dias = (int) uptime / (60 * 60 * 24);
		int minutos, horas;
		if (dias != 0)
			resultado += dias + &quot; &quot; + ((dias &gt; 1) ? &quot;dias&quot; : &quot;dia&quot;) + &quot;, &quot;;
		minutos = (int) uptime / 60;
		horas = minutos / 60;
		horas %= 24;
		minutos %= 60;
		if (horas != 0)
			resultado += horas + &quot;:&quot; + (minutos &lt; 10 ? &quot;0&quot; + minutos : minutos);
		else
			resultado += minutos + &quot; min&quot;;
		System.out.println(&quot;Encendido durante:\t&quot; + resultado);
	}
}
</pre>
<p><!--INFOLINKS_ON-->
<p style="text-align: justify;">Aspectos importantes:</p>
<ul style="text-align: justify;">
<li>La clase que nos proporciona los métodos para recuperar información del sistema operativo es <code>OperatingSystem</code>.</li>
<li>Con los métodos <code>getName</code> y <code>getDescription</code> obtenemos el nombre del sistema operativo y descripción (por ejemplo: nombre = Linux; descripción = Gentoo 2.1.6).</li>
<li style="text-align: justify;">El método <code>getUptime</code> de la clase Sigar nos permite conocer cuanto tiempo ha estado prendido el equipo analizado.</li>
</ul>
<p style="text-align: justify;">
<h3 style="text-align: justify;">Información de la CPU&#8230;</h3>
</p>
<p style="text-align: justify;">La siguiente clase nos permitirá conocer el modelo del procesador, sus capacidades, la cantidad de núcleos y el uso de los mismos, etc. Creamos una nueva clase llamada <code>InfoCPU</code> con el siguiente código:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

public class InfoCPU {
	private Sigar sigar;

	public void imprimirInfoCPU() {
		sigar = new Sigar();
		CpuInfo[] infos = null;
		CpuPerc[] cpus = null;
		try {
			infos = sigar.getCpuInfoList();
			cpus = sigar.getCpuPercList();
		} catch (SigarException e) {
			e.printStackTrace();
		}

		CpuInfo info = infos[0];
		long tamanioCache = info.getCacheSize();
		System.out.println(&quot;Fabricante:\t\t&quot; + info.getVendor());
		System.out.println(&quot;Modelo\t\t\t&quot; + info.getModel());
		System.out.println(&quot;Mhz\t\t\t&quot; + info.getMhz());
		System.out.println(&quot;Total CPUs\t\t&quot; + info.getTotalCores());
		if ((info.getTotalCores() != info.getTotalSockets())
				|| (info.getCoresPerSocket() &gt; info.getTotalCores())) {
			System.out.println(&quot;CPUs fisiscas\t\t&quot; + info.getTotalSockets());
			System.out
					.println(&quot;Nucleos por CPU\t\t&quot; + info.getCoresPerSocket());
		}

		if (tamanioCache != Sigar.FIELD_NOTIMPL)
			System.out.println(&quot;Tamanio cache\t\t&quot; + tamanioCache);
		System.out.println(&quot;&quot;);

		for (int i = 0; i &lt; cpus.length; i++)
			System.out.println(&quot;Consumo de CPU &quot; + i + &quot;\t&quot;
					+ CpuPerc.format(cpus[i].getUser()));

		try {
			System.out.println(&quot;Consumo total de CPU\t&quot;
					+ CpuPerc.format(sigar.getCpuPerc().getUser()));
		} catch (SigarException e) {
			e.printStackTrace();
		}
	}
}
</pre>
<p><!--INFOLINKS_ON-->Aspectos importantes:</p>
<ul style="text-align: justify;">
<li style="text-align: justify;">Se deben usar objetos de <code>CpuInfo</code> y <code>CpuPerc</code> que proporcionan los métodos para recuperar información del procesador. Dichos objetos se crean a partir de un objeto principal de tipo <code>Sigar</code>.</li>
<li style="text-align: justify;">Para extraer información acerca del  procesador usamos los métodos de la clase CpuInfo (por ejemplo <code>getVendor</code> o <code>getModel</code>).</li>
<li style="text-align: justify;">Los datos específicos de cada núcleo de nuestro procesador se extraen con los métodos de la clase <code>CpuPerc</code> (getUser para obtener el uso de un núcleo, por ejemplo).</li>
</ul>
<p style="text-align: justify;">
<h3>Información del sistema de archivos&#8230;</h3>
</p>
<p style="text-align: justify;">La siguiente clase nos permite obtener información del sistema de archivos: unidades montadas, espacio en disco, tipo de sistema de archivos, etc. Creamos una nueva clase llamada <code>InfoSistemaArchivos</code> con el siguiente código:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.NfsFileSystem;
import org.hyperic.sigar.SigarProxy;
import org.hyperic.sigar.SigarProxyCache;

public class InfoSistemaArchivos {
	private SigarProxy proxy;
	private Sigar sigar;

	public InfoSistemaArchivos() {
		sigar = new Sigar();
		proxy = SigarProxyCache.newInstance(sigar);
	}

	public void imprimirInfo() throws SigarException {
		FileSystem[] listaSistemaArchivos = proxy.getFileSystemList();
		System.out.println(&quot;\ndispos.|total|usado|disponible|%uso|dir|tipo\n&quot;);
		for (int i = 0; i &lt; listaSistemaArchivos.length; i++)
			imprimirSistemaArchivos(listaSistemaArchivos[i]);
	}

	public void imprimirSistemaArchivos(FileSystem sistemaArchivos)
			throws SigarException {
		long usado, disponible, total, porcentaje;

		try {
			FileSystemUsage uso;
			if (sistemaArchivos instanceof NfsFileSystem) {
				NfsFileSystem nfs = (NfsFileSystem) sistemaArchivos;
				if (!nfs.ping()) {
					System.out.println(nfs.getUnreachableMessage());
					return;
				}
			}
			uso = sigar.getFileSystemUsage(sistemaArchivos.getDirName());

			usado = uso.getTotal() - uso.getFree();
			disponible = uso.getAvail();
			total = uso.getTotal();

			porcentaje = (long) (uso.getUsePercent() * 100);
		} catch (SigarException e) {
			// por ejemplo, si en al procesar D:\ en windows falla
			// con &quot;Device not ready&quot;
			usado = disponible = total = porcentaje = 0;
		}

		String porcentajeUso;
		if (porcentaje == 0)
			porcentajeUso = &quot;-&quot;;
		else
			porcentajeUso = porcentaje + &quot;%&quot;;

		System.out.print(sistemaArchivos.getDevName());
		System.out.print(&quot;|&quot; + total);
		System.out.print(&quot;|&quot; + usado);
		System.out.print(&quot;|&quot; + disponible);
		System.out.print(&quot;|&quot; + porcentajeUso);
		System.out.print(&quot;|&quot; + sistemaArchivos.getDirName());
		System.out.println(&quot;|&quot; + sistemaArchivos.getSysTypeName());
	}
}
</pre>
<p><!--INFOLINKS_ON-->Aspectos importantes:</p>
<ul style="text-align: justify;">
<li style="text-align: justify;">La clase que nos proporciona los métodos para obtener información de una unidad en específico es <code>FileSystem</code>.</li>
<li style="text-align: justify;">El método <code>getDevName</code> nos devuelve el nombre del dispositivo referenciado por el objeto de la clase <code>FileSystem</code>.</li>
<li style="text-align: justify;">Los métodos <code>getTotal</code> y <code>getAvail</code> devuelven un <code>long</code> que representa el espacio total del dispositivo y espacio disponible, respectivamente.</li>
<li style="text-align: justify;">Para conocer el tipo de sistema de archivos (ext4, ntfs, fat, btrfs, etc.) utilizamos el método <code>getSysTypeName</code>.</li>
</ul>
<p style="text-align: justify;">
<h3>Información de la memoria&#8230;</h3>
</p>
<p style="text-align: justify;">La siguiente clase nos permite conocer la cantidad de memoria RAM que tiene el equipo, así como la que se está usando actualmente (tanto memoria física como virtual, aka, swap). Creamos una nueva clase llamada <code>InfoMemoria</code> con el siguiente código:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import org.hyperic.sigar.Mem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.Swap;
import org.hyperic.sigar.SigarException;

public class InfoMemoria {
	private Sigar sigar = new Sigar();
	public void imprimirInfo() throws SigarException {
		Mem memoria = sigar.getMem();
		Swap intercambio = sigar.getSwap();

		System.out.println(&quot;Cantidad de memoria RAM: &quot;+ memoria.getRam() + &quot;MB&quot;);

		System.out.println(&quot;Total: &quot;+enBytes(memoria.getTotal()));
		System.out.println(&quot;Usada: &quot;+enBytes(memoria.getUsed()));
		System.out.println(&quot;Disponible: &quot;+enBytes(memoria.getFree()));

		System.out.println(&quot;Memoria SWAP total: &quot;+enBytes(intercambio.getTotal()));
		System.out.println(&quot;Memoria SWAP usada: &quot;+enBytes(intercambio.getUsed()));
		System.out.println(&quot;Memoria SWAP libre: &quot;+enBytes(intercambio.getFree()));

	}
	private Long enBytes(long valor) {
		return new Long(valor / 1024);
	}
}</pre>
<p><!--INFOLINKS_ON--></p>
<p style="text-align: justify;">Aspectos importantes:</p>
<ul style="text-align: justify;">
<li style="text-align: justify;">La clase <code>Mem</code> nos proporciona métodos para obtener información de la memoria del sistema.</li>
<li style="text-align: justify;">La clase <code>Swap</code> hace lo mismo que Mem, pero para la memoria virtual.</li>
<li style="text-align: justify;">Los métodos <code>getTotal</code> y <code>getUsed</code> nos devuelven un long que representa (en bits) la cantidad de memoria del equipo y lo que está usando, respectivamente.</li>
</ul>
<p style="text-align: justify;">
<h3>La clase main&#8230;</h3>
</p>
<p style="text-align: justify;">El main de nuestro proyecto estará contenido en la clase <code>InfoSistema</code>:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import org.hyperic.sigar.SigarException;
public class InfoSistema {
	public static void main(String[] args) {
		try {
			System.out.println(&quot;====Informacion del sistema====&quot;);
			new InfoSO().imprimirInfo();
			System.out.println(&quot;\n==== Informacion de la CPU ====&quot;);
			new InfoCPU().imprimirInfoCPU();
			System.out.println(&quot;\n====Informacion del sistema de archivos====&quot;);
			new InfoSistemaArchivos().imprimirInfo();
			System.out.println(&quot;\n====Informacion de la memoria====&quot;);
			new InfoMemoria().imprimirInfo();
		} catch (SigarException e) {
			e.printStackTrace();
		}
	}
}</pre>
<p><!--INFOLINKS_ON--></p>
<p>Eso es todo, solo nos queda ejecutar el proyecto y, opcionalmente, crear un archivo .jar para ejecutar en cualquier lado.</p>
<p style="text-align: justify;">
<h3>Descargas&#8230;</h3>
</p>
<ul style="text-align: justify;">
<li><a href="http://casidiablo.net/descargar/Informacion+Sistema+Java" class="tooltip" title="Proyecto de Eclipse comprimido en ZIP (contiene las librerías de Sigar)">Descarga del código fuente usado en esta entrada</a></li>
<li><a href="https://sourceforge.net/project/showfiles.php?group_id=172552">Descargar librerías de Sigar de SourceForge</a></li>
</ul>
<p><br/><br/></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/cpu/" rel="tag nofollow">cpu</a>, <a href="http://casidiablo.net/tag/disco/" rel="tag nofollow">disco</a>, <a href="http://casidiablo.net/tag/ejemplo/" rel="tag nofollow">ejemplo</a>, <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicio/" rel="tag nofollow">ejercicio</a>, <a href="http://casidiablo.net/tag/espacio/" rel="tag nofollow">espacio</a>, <a href="http://casidiablo.net/tag/ide/" rel="tag nofollow">ide</a>, <a href="http://casidiablo.net/tag/informacion/" rel="tag nofollow">informacion</a>, <a href="http://casidiablo.net/tag/java/" rel="tag nofollow">java</a>, <a href="http://casidiablo.net/tag/linux/" rel="tag nofollow">linux</a>, <a href="http://casidiablo.net/tag/memoria/" rel="tag nofollow">memoria</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a>, <a href="http://casidiablo.net/tag/ram/" rel="tag nofollow">ram</a>, <a href="http://casidiablo.net/tag/sistema/" rel="tag nofollow">sistema</a>, <a href="http://casidiablo.net/tag/wordpress/" rel="tag nofollow">wordpress</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/capturar-informacion-sistema-operativo-java/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Lista de códigos de colores para bash</title>
		<link>http://casidiablo.net/colorear-salida-consola/</link>
		<comments>http://casidiablo.net/colorear-salida-consola/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 21:30:08 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[colores]]></category>
		<category><![CDATA[consola]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3209</guid>
		<description><![CDATA[

Siempre olvido cómo generar salida coloreada en la consola, y por lo tanto pierdo tiempo buscando en Internet. Así que, aprovechando que tengo fresco dicho tema, mejor dejo un listado y las instrucciones con el ánimo de que sea útil para alguien (y para mi, por supuesto).

Negro 0;30
Gris oscuro 1;30
Azul 0;34
Azul resaltado 1;34
Verde 0;32
Verde resaltado [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fcolorear-salida-consola%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Lista%20de%20c%C3%B3digos%20de%20colores%20para%20bash%22%20%7D);"></div>
<p style="text-align: justify;">Siempre olvido cómo generar salida coloreada en la consola, y por lo tanto pierdo tiempo buscando en Internet. Así que, aprovechando que tengo fresco dicho tema, mejor dejo un listado y las instrucciones con el ánimo de que sea útil para alguien (y para mi, por supuesto).</p>
<ul>
<li>Negro 0;30</li>
<li>Gris oscuro 1;30</li>
<li>Azul 0;34</li>
<li>Azul resaltado 1;34</li>
<li>Verde 0;32</li>
<li>Verde resaltado 1;32</li>
<li>Cian 0;36</li>
<li>Cyan resaltado 1;36</li>
<li>Rojo 0;31</li>
<li>Rojo resaltado 1;31</li>
<li>Púrpura 0;35</li>
<li>Púrpura resaltado 1;35</li>
<li>Café 0;33</li>
<li>Amarillo 1;33</li>
<li>Gris 0;37</li>
<li>Blanco 1;37</li>
</ul>
<p><br/></p>
<h3>Ejemplos&#8230;</h3>
<p>Si lo vas a probar usando el comando echo, debes ejecutarlo con el parámetro -e:</p>
<p><code>echo -e 'Esto es \e[0;31mrojo\e[0m y esto es \e[1;34mazul resaltado\e[0m'</code></p>
<p><strong>Resultado</strong>:  <img title="bash-colors" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/08/bash-colors.png" alt="bash-colors" width="261" height="14" /></p>
<p><code>echo -e 'Así se escribe \e[1;34mG\e[0m\e[1;31mo\e[0m\e[1;33mo\e[0m\e[1;34mg\e[0m\e[1;32ml\e[0m\e[1;31me\e[0m'</code></p>
<p><strong>Resultado</strong>: <img title="google" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/08/google.png" alt="google" width="150" height="16" /></p>
<p>Como puedes observar, se trata de poner lo que quieras colorear entre los caracteres de escape \e[CODIGOm y \e[0m.</p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/bash/" rel="tag nofollow">bash</a>, <a href="http://casidiablo.net/tag/colores/" rel="tag nofollow">colores</a>, <a href="http://casidiablo.net/tag/consola/" rel="tag nofollow">consola</a>, <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/linux/" rel="tag nofollow">linux</a>, <a href="http://casidiablo.net/tag/tip/" rel="tag nofollow">tip</a>, <a href="http://casidiablo.net/tag/wordpress/" rel="tag nofollow">wordpress</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/colorear-salida-consola/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>La clase BigInteger en Java</title>
		<link>http://casidiablo.net/numeros-primos-java-biginteger/</link>
		<comments>http://casidiablo.net/numeros-primos-java-biginteger/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 18:14:15 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[BigInteger]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3021</guid>
		<description><![CDATA[

BigInteger y BigDecimal son clases envoltura de los tipos primitivos int y double, sin embargo tienen ventajas sobre los tipos primitivos. Cuando necesites usar números grandes en Java la mejor opción es usar estas clases, ya que su limite de almacenamiento es el límite de memoria que tenga la máquina virtual de Java.
Además, estas clases [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fnumeros-primos-java-biginteger%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22La%20clase%20BigInteger%20en%20Java%22%20%7D);"></div>
<p style="text-align: justify;"><code>BigInteger</code> y <code>BigDecimal</code> son clases envoltura de los tipos primitivos <code>int</code> y <code>double</code>, sin embargo tienen ventajas sobre los tipos primitivos. Cuando necesites usar números grandes en Java la mejor opción es usar estas clases, ya que su limite de almacenamiento es el límite de memoria que tenga la máquina virtual de Java.</p>
<p style="text-align: justify;">Además, estas clases proporcionan algunos métodos bastante interesantes, como las operaciones básicas o saber si el número es primo o no. Como siempre vamos con algunos ejemplos de apoyo:</p>
<h3 style="text-align: justify;">Operaciones básicas con la clase BigInteger</h3>
<p style="text-align: justify;">En el siguiente ejemplo se hace uso de los métodos <em>add</em>, <em>substract</em>, <em>multiply</em> y <em>divide</em> para realizar las operaciones básicas de suma, resta, multiplicación y división:<span id="more-3021"></span></p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import java.math.BigInteger;
public class PruebaOperacionesBasicas {
    public static void main(String args[]){
        BigInteger entero1 = BigInteger.valueOf(45);
        BigInteger entero2 = BigInteger.valueOf(15);
        //sumar con metodo add()
        String texto = &quot;La suma entre &quot;+entero1+
                &quot; y &quot;+entero2+&quot; es &quot;+entero1.add(entero2);
        //restar con metodo substract()
        texto += &quot;\nLa resta entre &quot;+entero1+
                &quot; y &quot;+entero2+&quot; es &quot;+entero1.subtract(entero2);
        //multiplicar con metodo multiply()
        texto += &quot;\nEl producto de &quot;+entero1+
                &quot; y &quot;+entero2+&quot; es &quot;+entero1.multiply(entero2);
        //dividir con metodo divide()
        texto += &quot;\nLa división de &quot;+entero1+
                &quot; y &quot;+entero2+&quot; entre &quot;+entero1.divide(entero2);
        System.out.println(texto);
    }
}</pre>
<p><!--INFOLINKS_ON--></p>
<h3 style="text-align: justify;">Números primos en Java</h3>
<p style="text-align: justify;">Este es un típico ejercicio que nos plantean en la universidad; se trata de hacer un listado de los primeros X números primos. En este caso <code>BigInteger</code> nos proporciona dos métodos muy interesantes: <em>isProbablePrime</em> y <em>nextProbablePrime</em>. El primero de ellos devuelve <code>true</code> si el número es probablemente primo (recordemos que es complejo saber si un número es o no primo cuando es demasiado grande); el segundo devuelve el próximo posible número primo a partir del valor que contenga el objeto.</p>
<p style="text-align: justify;">La siguiente aplicación usa el método <em>nextProbablePrime</em> para listar los primeros 2000 números primos:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import java.math.BigInteger;
public class PruebaNumerosPrimos {
    public static void main(String args[]){
        //iniciar el entero en cero
        BigInteger entero = BigInteger.ZERO;
        StringBuffer texto = new StringBuffer();
        for(int i = 0; i&lt;2000; i++){
            entero = entero.nextProbablePrime();
            texto.append(entero+&quot;\n&quot;);
            entero.add(BigInteger.ONE);
        }
        System.out.println(texto);
    }
}</pre>
<p><!--INFOLINKS_ON--></p>
<p style="text-align: justify;"><strong>Otros métodos interesantes</strong></p>
<p style="text-align: justify;">La clase <code>BigInteger</code> proporciona además otros métodos que nos ahorrarán bastante tiempo y líneas de código:</p>
<ul style="text-align: justify;">
<li><em>pow</em>, nos permite elevar un número a la potencia que deseemos.</li>
<li><em>comparteTo</em>, nos permite comparar si un BigInteger es mayor, igual o menor que otro.</li>
<li><em>min</em> y <em>max</em>, nos permiten saber cuál de los dos BigInteger es menor o mayor.</li>
</ul>
<p style="text-align: justify;">Como mencioné al principio, también es posible usar la clase <code>BigDecimal</code> que funciona de manera similar pero con números de coma flotante.</p>
</p>
<p><a class="descargacodigo tooltip" title="Descargar archivo ZIP con las fuentes del ejemplo" href="http://casidiablo.net/descargar/Pruebas+BigInteger"><strong>Descargar código fuente de ejemplos</strong></a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/biginteger/" rel="tag nofollow">BigInteger</a>, <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/java/" rel="tag nofollow">java</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/numeros-primos-java-biginteger/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Buscar datos dentro de arreglos C# &#8211; Método Lineal</title>
		<link>http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/</link>
		<comments>http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 16:52:01 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[buscar]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[lineal]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2216</guid>
		<description><![CDATA[

En el siguiente ejemplo se muestra cómo realizar búsquedas dentro de un arreglo de manera lineal.
Ejemplo&#8230;



using System;
using System.Drawing;
using System.Windows.Forms;
namespace BusquedaLineal
{
   public class BusquedaLineal : Form
   {
      private Button botonBuscar;
      private TextBox cajaEntrada;
      private Label labelSalida;
  [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fbuscar-elementos-dentro-array-csharp-metodo-lineal%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Buscar%20datos%20dentro%20de%20arreglos%20C%23%20-%20M%C3%A9todo%20Lineal%22%20%7D);"></div>
<p>En el siguiente ejemplo se muestra cómo realizar búsquedas dentro de un <a href="http://casidiablo.net/arreglos-en-c-sharp/">arreglo</a> de manera lineal.</p>
<h3>Ejemplo&#8230;</h3>
<p style="text-align: center;"><img src="http://casidiablo.net/wordpress/wp-content/uploads/2008/11/busquedalineal.png" alt="busqueda lineal"/></p>
<p><span id="more-2216"></span></p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
using System.Drawing;
using System.Windows.Forms;
namespace BusquedaLineal
{
   public class BusquedaLineal : Form
   {
      private Button botonBuscar;
      private TextBox cajaEntrada;
      private Label labelSalida;
      int[] a = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26,
                  28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50 };
      public BusquedaLineal()
      {
         InitializeComponent();
      }
      private void InitializeComponent()
      {
         this.botonBuscar = new Button();
         this.cajaEntrada = new TextBox();
         this.labelSalida = new Label();
         this.SuspendLayout();
         //
         // botonBuscar
         //
         this.botonBuscar.Location = new System.Drawing.Point(8, 8);
         this.botonBuscar.Name = &quot;botonBuscar&quot;;
         this.botonBuscar.TabIndex = 0;
         this.botonBuscar.Text = &quot;Buscar&quot;;
         this.botonBuscar.Click += new System.EventHandler(this.botonBuscar_Click);
         //
         // cajaEntrada
         //
         this.cajaEntrada.Location = new System.Drawing.Point(96, 9);
         this.cajaEntrada.Name = &quot;cajaEntrada&quot;;
         this.cajaEntrada.Size = new System.Drawing.Size(88, 20);
         this.cajaEntrada.TabIndex = 1;
         this.cajaEntrada.Text = &quot;&quot;;
         //
         // labelSalida
         //
         this.labelSalida.Location = new System.Drawing.Point(8, 40);
         this.labelSalida.Name = &quot;labelSalida&quot;;
         this.labelSalida.Size = new System.Drawing.Size(184, 23);
         this.labelSalida.TabIndex = 2;
         //
         // BusquedaLineal
         //
         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
         this.ClientSize = new System.Drawing.Size(200, 69);
         this.Controls.AddRange(new Control[] {
                  this.labelSalida,
                  this.cajaEntrada,
                  this.botonBuscar});
         this.Name = &quot;BusquedaLineal&quot;;
         this.Text = &quot;BusquedaLineal&quot;;
         this.ResumeLayout(false);
      }
      static void Main()
      {
         Application.Run(new BusquedaLineal());
      }
      private void botonBuscar_Click( object sender,
         System.EventArgs e )
      {
         int datoBuscar = Int32.Parse( cajaEntrada.Text );
         int indiceElemento = BuscarLineal( a, datoBuscar );
         if ( indiceElemento != -1 )
            labelSalida.Text =
               &quot;Encontrado en el indice &quot; + indiceElemento;
         else
            labelSalida.Text = &quot;Valor no encontrado&quot;;
      } // fin del metodo botonBuscar_Click
      // buscar valor dentro del array
      public int BuscarLineal( int[] array, int dato )
      {
         for ( int n = 0; n &lt; array.Length; n++ )
         {
            if ( array[ n ] == dato )
               return n;
         }
         return -1;
      } // fin del metodo BusquedaLineal
   }
}</pre>
<p><!--INFOLINKS_ON--></p>
<p><a class="tooltip descargacodigo" title="Busqueda lineal en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Busqueda+Lineal+C+Sharp">Descargar código fuente</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/net/" rel="tag nofollow">.net</a>, <a href="http://casidiablo.net/tag/arreglos/" rel="tag nofollow">arreglos</a>, <a href="http://casidiablo.net/tag/buscar/" rel="tag nofollow">buscar</a>, <a href="http://casidiablo.net/tag/c-sharp/" rel="tag nofollow">C-Sharp</a>, <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/lineal/" rel="tag nofollow">lineal</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/buscar-elementos-dentro-array-csharp-metodo-lineal/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ordenar arreglos C# &#8211; Método burbuja</title>
		<link>http://casidiablo.net/ordenamiento-array-c-sharp-metodo-burbuja/</link>
		<comments>http://casidiablo.net/ordenamiento-array-c-sharp-metodo-burbuja/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 15:48:32 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[burbuja]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[ordenar]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2212</guid>
		<description><![CDATA[

En el siguiente ejemplo se muestra cómo realizar el ordenamiento de arreglos de enteros, usando el método burbuja en C#.
Ejemplo&#8230;


using System;
public class OrdenamientoBurbuja
{
  static void Main()
  {
     int[] a =  { 54, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
     string salida [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fordenamiento-array-c-sharp-metodo-burbuja%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Ordenar%20arreglos%20C%23%20-%20M%C3%A9todo%20burbuja%22%20%7D);"></div>
<p>En el siguiente ejemplo se muestra cómo realizar el ordenamiento de arreglos de enteros, usando el método burbuja en C#.</p>
<h3>Ejemplo&#8230;</h3>
<p><span id="more-2212"></span></p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
public class OrdenamientoBurbuja
{
  static void Main()
  {
     int[] a =  { 54, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
     string salida = &quot;Valores de los items originales\n&quot;;
     for ( int i = 0; i &lt; a.Length; i++ )
        salida += &quot;   &quot; + a[ i ];
     // ordenar elementos del arreglo
     OrdenarBurbuja( a );
     salida += &quot;\n\nValores de los items en orden descendente\n&quot;;
     for ( int i = 0; i &lt; a.Length; i++ )
        salida += &quot;   &quot; + a[ i ];
     Console.WriteLine(salida);
  } // fin del metodo main
  // ordenar elementos de un arreglo con el metodo burbuja
  static public void OrdenarBurbuja( int[] b )
  {
     for ( int pasadas = 1; pasadas &lt; b.Length; pasadas++ ) // pasadas
        for ( int i = 0; i &lt; b.Length - 1; i++ )
           if ( b[ i ] &gt; b[ i + 1 ] )      // comparar
              intercambio( b, i );         // intercambiar
  }
  // intercambio de dos elementos en un arreglo
  static public void intercambio( int[] c, int primero )
  {
     int temp;      // variable temporal para el intercambio
     temp = c[ primero ];
     c[ primero ] = c[ primero + 1 ];
     c[ primero + 1 ] = temp;
  }
}</pre>
<p><!--INFOLINKS_ON--></p>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Valores de los items originales<br />
   54   6   4   8   10   12   89   68   45   37</p>
<p>Valores de los items en orden descendente<br />
   89   68   54   45   37   12   10   8   6   4</p></div>
<p><a class="tooltip descargacodigo" title="Método burbuja en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Ordenar+Arreglo+Metodo+Burbuja">Descargar código fuente</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/net/" rel="tag nofollow">.net</a>, <a href="http://casidiablo.net/tag/arreglos/" rel="tag nofollow">arreglos</a>, <a href="http://casidiablo.net/tag/burbuja/" rel="tag nofollow">burbuja</a>, <a href="http://casidiablo.net/tag/c-sharp/" rel="tag nofollow">C-Sharp</a>, <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/ordenar/" rel="tag nofollow">ordenar</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/ordenamiento-array-c-sharp-metodo-burbuja/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Ejemplos básicos de manipulación de arreglos en C#</title>
		<link>http://casidiablo.net/ejercicios-basicos-manejo-arreglos-c-sharp/</link>
		<comments>http://casidiablo.net/ejercicios-basicos-manejo-arreglos-c-sharp/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 21:00:42 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2191</guid>
		<description><![CDATA[

Ejemplos básicos de manipulación de arreglos en C#
Sumar elementos de un array
Sinopsis: hacer la sumatoria de los elementos de un arreglo.

using System;
class SumarArreglo
{
  // metodo Main
  static void Main( string[] args )
  {
     int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fejercicios-basicos-manejo-arreglos-c-sharp%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Ejemplos%20b%C3%A1sicos%20de%20manipulaci%C3%B3n%20de%20arreglos%20en%20C%23%22%20%7D);"></div>
<p>Ejemplos básicos de manipulación de arreglos en C#</p>
<h3>Sumar elementos de un array</h3>
<p><strong>Sinopsis</strong>: hacer la sumatoria de los elementos de un arreglo.</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class SumarArreglo
{
  // metodo Main
  static void Main( string[] args )
  {
     int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     int total = 0;
     for ( int i = 0; i &lt; a.Length; i++ )
        total += a[ i ];
     Console.WriteLine( &quot;Suma de todos los elementos del array: &quot; + total);
  } // fin de Main
} // fin de la clase SumarArreglo</pre>
<p><!--INFOLINKS_ON--></p>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Suma de todos los elementos del array: 55</div>
<p><a class="tooltip descargacodigo" title="Suma de elementos de arreglos en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Sumar+Arreglo+C+Sharp">Descargar código fuente</a></p>
<h3>Creacion de histogramas</h3>
<p><strong>Sinopsis</strong>: crear un histograma (barras a base de asteriscos) a partir de unos datos.<span id="more-2191"></span></p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class Histograma
{
  // metodo Main
  static void Main( string[] args )
  {
     int[] n = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
     string salida = &quot;Elemento\tValor\tHistograma\n&quot;;
     // construir salida
     for ( int i = 0; i &lt; n.Length; i++ )
     {
        salida += &quot;\n&quot; + i + &quot;\t\t\t&quot; + n[ i ] + &quot;\t\t&quot;;
        for ( int j = 1; j &lt;= n[ i ]; j++ ) // imprimir una barra
           salida += &quot;*&quot;;
     }
     Console.WriteLine( salida);
  } // fin Main
} // fin de la clase Histograma</pre>
<p><!--INFOLINKS_ON--></p>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Elemento	Valor	Histograma</p>
<p>0			19		*******************<br />
1			3		***<br />
2			15		***************<br />
3			7		*******<br />
4			11		***********<br />
5			9		*********<br />
6			13		*************<br />
7			5		*****<br />
8			17		*****************<br />
9			1		*</p></div>
<p><a class="tooltip descargacodigo" title="Histogramas en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Histograma+C+Sharp">Descargar código fuente</a></p>
<h3>Estadisticas de notas de estudiantes</h3>
<p><strong>Sinopsis</strong>: apartir de un arreglo de notas (puntajes) identificar la frecuencia de cada una de ellas entre todos los estudiantes.</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: csharp;">using System;
class EncuestaEstudiantes
{
  // metodo Main
  static void Main( string[] args )
  {
     int[] respuestas = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1,
        6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7,
        5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };

     int[] frecuencia = new int[ 11 ];
     string salida = &quot;&quot;;

     // incrementar la frecuecia de para cada respuesta
     for ( int j = 0; j &lt; respuestas.Length; j++ )
        ++frecuencia[ respuestas[ j ] ];

     salida += &quot;Puntaje\tFrecuencia\n&quot;;

     // resultados
     for ( int puntaje = 1; puntaje &lt; frecuencia.Length; puntaje++ )
        salida += puntaje + &quot;\t\t&quot; + frecuencia[ puntaje ] + &quot;\n&quot;;

     Console.WriteLine( salida);

  } // fin Main

} // fin de la clase EncuestaEstudiantes</pre>
<p><!--INFOLINKS_ON--></p>
<p><strong>Resultado&#8230;</strong></p>
<div class="consola">Puntaje	Frecuencia<br />
1		2<br />
2		2<br />
3		2<br />
4		2<br />
5		5<br />
6		11<br />
7		5<br />
8		7<br />
9		1<br />
10		3</div>
<p><a class="tooltip descargacodigo" title="Encuesta Estudiantes en C#::Contiene archivo fuente .cs, proyecto para Visual Studio y Proyecto para Monodevelop" href="http://casidiablo.net/descargar/Estudiantes+C+Sharp">Descargar código fuente</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/net/" rel="tag nofollow">.net</a>, <a href="http://casidiablo.net/tag/arreglos/" rel="tag nofollow">arreglos</a>, <a href="http://casidiablo.net/tag/c/" rel="tag nofollow">C++</a>, <a href="http://casidiablo.net/tag/c-sharp/" rel="tag nofollow">C-Sharp</a>, <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/ejercicios-basicos-manejo-arreglos-c-sharp/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>[código] Obtener variables de entorno e información del sistema con Java</title>
		<link>http://casidiablo.net/obtener-variables-entorno-informacion-sistema-java/</link>
		<comments>http://casidiablo.net/obtener-variables-entorno-informacion-sistema-java/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 04:01:49 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1704</guid>
		<description><![CDATA[

El siguiente es un pequeño programa que usando el método getenv de la clase System, devuelve información del sistema operativo y de las variables de entorno. La salida del mismo es algo como esto:
$ java InfoCompu
Nombre del PC: alienxp
Nombre usuario: cristian
Procesador: x86 Family 15 Model 4 Stepping 1, GenuineIntel
Sistema operativo: Ubuntu 8.04 Hardy Heron
Version JDK: [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fobtener-variables-entorno-informacion-sistema-java%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%5Bc%C3%B3digo%5D%20Obtener%20variables%20de%20entorno%20e%20informaci%C3%B3n%20del%20sistema%20con%20Java%22%20%7D);"></div>
<p>El siguiente es un pequeño programa que usando el método <code><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getenv(java.lang.String)">getenv</a></code> de la clase <code><a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html">System</a></code>, devuelve información del sistema operativo y de las variables de entorno. La salida del mismo es algo como esto:</p>
<div class="consola">$ java InfoCompu<br />
Nombre del PC: alienxp<br />
Nombre usuario: cristian<br />
Procesador: x86 Family 15 Model 4 Stepping 1, GenuineIntel<br />
Sistema operativo: Ubuntu 8.04 Hardy Heron<br />
Version JDK: 1.6.0_01<br />
Directorio actual: /home/cristian</div>
<div class="consola">&gt; java InfoCompu<br />
Nombre del PC: winxp<br />
Nombre usuario: ccasti<br />
Procesador: x86 Family 15 Model 4 Stepping 1, GenuineIntel<br />
Sistema operativo: Windows XP<br />
Version JDK: 1.5.0<br />
Directorio actual: c:\Documents and Settings\ccasti\Desktop</div>
<h3>El código&#8230;</h3>
<p><span id="more-1704"></span><br />
<!--INFOLINKS_OFF-->
<pre class="brush: java;">class InfoCompu
{
    public static void main(String args[])
    {
       System.out.println(&quot;Nombre del PC: &quot; + nombrePC());
       System.out.println(&quot;Nombre usuario: &quot; + usuario());
       System.out.println(&quot;Procesador: &quot; + procesador());
       System.out.println(&quot;Sistema operativo: &quot; + SO());
       System.out.println(&quot;Version JDK: &quot; + JDK());
       System.out.println(&quot;Directorio actual: &quot; + dir());
    }
    public static String nombrePC()
    {
       return System.getenv(&quot;COMPUTERNAME&quot;);
    }
    public static String usuario()
    {
       return System.getProperty(&quot;user.name&quot;);
    }
    public static String procesador()
    {
       return System.getenv(&quot;PROCESSOR_IDENTIFIER&quot;);
    }
    public static String SO()
    {
         return System.getProperty(&quot;os.name&quot;);
    }
    public static String JDK()
    {
         return System.getProperty(&quot;java.version&quot;);
    }
    public static String dir()
    {
       return System.getProperty(&quot;user.dir&quot;);
    }
}</pre>
<p><!--INFOLINKS_ON--></p>
<p><a class="descargacodigo tooltip" title="Descargar código fuente del anterior ejemplo" href="http://casidiablo.net/descargar/Funcion+getenv">Descargar código</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/java/" rel="tag nofollow">java</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/obtener-variables-entorno-informacion-sistema-java/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>El Juego de la Vida [Java]</title>
		<link>http://casidiablo.net/juego-de-la-vida-java/</link>
		<comments>http://casidiablo.net/juego-de-la-vida-java/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 20:49:53 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[implementación]]></category>
		<category><![CDATA[juego]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[vida]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1382</guid>
		<description><![CDATA[

Se trata de una implementación chichi del famoso Juego de la Vida en Java, ya que Burnhack me ha picado con el gusanillo de la curiosidad   En fin&#8230; el programa simula un espacio de células que cumplen con las reglas básicas del juego, permite dibujar nuevos patrones, generar granjas aleatorias, y poner en [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fjuego-de-la-vida-java%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22El%20Juego%20de%20la%20Vida%20%5BJava%5D%22%20%7D);"></div>
<p>Se trata de una implementación <span style="text-decoration: line-through;">chichi</span> del famoso <a href="http://es.wikipedia.org/wiki/Juego_de_la_vida">Juego de la Vida</a> en <strong><a href="http://casidiablo.net/java/">Java</a></strong>, ya que <a href="http://www.eduhack.es/foro/">Burnhack</a> me ha picado con el <abbr title="Evita comentarios generados por leer con doble sentido ;)">gusanillo</abbr> de la curiosidad <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  En fin&#8230; el programa simula un espacio de células que cumplen con las reglas básicas del juego, permite dibujar nuevos patrones, generar granjas aleatorias, y poner en marcha automática o manualmente. De paso me sirvió para explicarle a mis hermanos el porqué del <a href="http://www.bit-man.com.ar/es/HackerEmblema.html">emblema hacker</a> <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: center;"><img class="size-full wp-image-1383 aligncenter" title="juego-de-la-vida" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/pantallazo-el-juego-de-la-vida-1.png" alt="" width="500" height="550" /></p>
<p>Puedo decir que me divertí mucho programando, y que a la vez me da pena no haber podido dedicarle más de tres días: el resultado es un programa que funciona bien cuando se ejecuta de manera normalita, <em>pero</em> con la opción de zoom <em>hay</em> problemas. Y aquí <strong>les doy un par de consejos</strong>: puesto que al principio el programa lo iba a hacer junto con <a href="http://www.eduhack.es/foro/">Burnhack</a>, utilicé una clase que él utilizaba llamada BufferedImage (para dibujar las figuras). Luego, cuando me dí cuenta de que no entendía <span style="text-decoration: line-through;">ni mierda</span> nada del código de mi amigo, decidí hacer la lógica desde cero; y aquí van los consejos:</p>
<ul>
<li>Hacer comentarios es SUPREMAMENTE IMPORTANTE, sobre todo cuando se programa en grupo</li>
<li>Cuando hagas este tipo de proyectos es mejor que uses Canvas; yo caí en cuenta muy tarde y ya me da flojera arreglarlo</li>
</ul>
<p>Por supuesto, el programa está disponible para que lo estudien, lo copien, lo regalen, etc. Espero le sirva a alguien. Les quedo debiendo la explicación porqué es algo largo <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><em><strong>Nota</strong>: los iconos los he tomado de <a href="http://www.icojoy.com/articles/25/">Icojoy</a></em></p>
<h3>Compilación y ejecución&#8230;</h3>
<p class="consola">#compilación<br />
javac Glider.java<br />
#ejecución normal<br />
java Glider<br />
#ejecución con la característica zoom (umm, que mal programador soy <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' />  )<br />
java Glider &#8211;zoom</p>
<p><a class="tooltip download" title="Desgargar código fuente + imagenes" href="http://casidiablo.net/descargar/Juego+de+la+vida"><strong>Descargar código fuente</strong></a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/game/" rel="tag nofollow">game</a>, <a href="http://casidiablo.net/tag/implementacion/" rel="tag nofollow">implementación</a>, <a href="http://casidiablo.net/tag/java/" rel="tag nofollow">java</a>, <a href="http://casidiablo.net/tag/juego/" rel="tag nofollow">juego</a>, <a href="http://casidiablo.net/tag/life/" rel="tag nofollow">life</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a>, <a href="http://casidiablo.net/tag/vida/" rel="tag nofollow">vida</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/juego-de-la-vida-java/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Procesando XML en Java [Xerces]</title>
		<link>http://casidiablo.net/procesamiento-xml-java-xerces/</link>
		<comments>http://casidiablo.net/procesamiento-xml-java-xerces/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 17:29:34 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[programas]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[Parsear]]></category>
		<category><![CDATA[xerces]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1329</guid>
		<description><![CDATA[


En este artículo utilizaré un pequeño ejemplo para explicar cómo manipular documentos XML usando XERCES Java Parser. En este primer ejemplo usaré el API DOM, y la utilizaremos para generar un archivo XML y guardarlo en disco, y posteriormente procesaremos (parsearemos) dicho archivo para leer su información.
Nota: Sino tienes claro qué es un parser XML, [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fprocesamiento-xml-java-xerces%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Procesando%20XML%20en%20Java%20%5BXerces%5D%22%20%7D);"></div>
<p style="text-align: center;"><img class="size-full wp-image-1344 aligncenter" title="java-duke-xml" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/java-duke-xml.png" alt="duke java xml" /></p>
<p>En este artículo utilizaré un pequeño ejemplo para explicar cómo manipular documentos XML usando <a href="http://xerces.apache.org/xerces-j/">XERCES Java Parser</a>. En este primer ejemplo usaré el API DOM, y la utilizaremos para generar un archivo XML y guardarlo en disco, y posteriormente procesaremos (<em>parsearemos</em>) dicho archivo para leer su información.</p>
<p><strong>Nota</strong>: Sino tienes claro qué es un parser XML, qué es un API XML para Java y cuáles están disponibles, o aún tienes algunas dudas en relación con Java y XML, puedes/debes leer <a href="http://casidiablo.net/xml-java/">este pequeño artículo</a>.</p>
<h3>Generación de archivos XML usando Xerces</h3>
<p>En esta ocasión utilizaremos el API DOM para generar un archivo XML, que guardará información acerca de un listado de descargas ficticio. Como resultado, nuestra aplicación generará el siguiente documento XML:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;Descargas&gt;
    &lt;descarga id=&quot;1&quot;&gt;
        &lt;titulo&gt;Libros Java&lt;/titulo&gt;
        &lt;ruta&gt;http://casidiablo.net/libros.zip&lt;/ruta&gt;
        &lt;hits&gt;2546&lt;/hits&gt;
    &lt;/descarga&gt;
    &lt;descarga id=&quot;2&quot;&gt;
        &lt;titulo&gt;Libros C Sharp&lt;/titulo&gt;
        &lt;ruta&gt;http://casidiablo.net/libroscs.zip&lt;/ruta&gt;
        &lt;hits&gt;1654&lt;/hits&gt;
    &lt;/descarga&gt;
&lt;/Descargas&gt;</pre>
<p><!--INFOLINKS_ON--></p>
<p>En el cual tenemos un elemento llamado <em><strong>descarga</strong></em> que contiene un atributo llamado <em><strong>id</strong></em>; además posee tres nodos hijos: <em><strong>titulo</strong></em>, <em><strong>ruta</strong></em> y <em><strong>hits</strong></em>. Teniendo en cuenta esto crearemos un pequeño bean (clase <em>Descargas.java</em>), que contiene dichos datos:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">public class Descargas {
    //Variables
    private int id;
    private String titulo;
    private String ruta;
    private int hits;
    //Constructor de la clase
    public Descargas(int id, String titulo, String ruta, int hits){
        this.id = id;
        this.titulo = titulo;
        this.ruta = ruta;
        this.hits = hits;
    }
    //Metodos Setters y Getters
    public void setID(int id) {
        this.id = id;
    }
    public int getID() {
        return this.id;
    }
    //etc... (AL FINAL DEL ARTÍCULO PUEDES DESCARGAR EL EJEMPLO COMPLETO)
}</pre>
<p><!--INFOLINKS_ON--></p>
<p>Más adelante utilizaremos la clase <em>GenerarXML.java</em>, quien se encargará de crear el archivo XML. De momento detallaremos los pasos básicos para realizar tareas de ese tipo:</p>
<ul>
<li>Crear los objetos a cargar en el documento XML (en nuestro ejemplo, objetos tipo <strong><em>Descargas</em></strong>)</li>
<li>Crear un objeto <em><a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></em> que contendrá el documento XML</li>
<li>Generar los datos XML para los objetos creados en primer paso</li>
<li>Crear un archivo (o salida) XML</li>
</ul>
<p>En nuestro ejemplo, la invocación a los métodos que realizan estas tareas se encuentra en el método <em>main</em>:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">public static void main(String args[])
{
   GenerarXML generador = new GenerarXML();
   // A. Crear el objeto(s) a Descargas
   Descargas descarga = new Descargas(1, &quot;Libros Java&quot;, &quot;http://casidiablo.net/libros.zip&quot;, 2546);
   Descargas descarga2 = new Descargas(2, &quot;Libros C Sharp&quot;, &quot;http://casidiablo.net/libroscs.zip&quot;, 1654);
   // B. Generar un documento XML usando Document
   generador.generaDocumentoXML();
   // C. Generar XML para el/los objeto(s)
   generador.generarDocumentoXMLDescarga(descarga);
   generador.generarDocumentoXMLDescarga(descarga2);
   // D. Obtener el código XML
   String textoXML = generador.obtenerTextoXML();
   generador.guardarDocumentoXML(textoXML);
   System.out.println(textoXML);
}</pre>
<p><!--INFOLINKS_ON--></p>
<p>Veamos con más profundidad cómo funciona el segundo paso (<strong><em>Crear un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a> que contendrá el documento XML</em></strong>):</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">public void generaDocumentoXML() {
    try {
        // 1. Crear objeto DocumentBuilderFactory
        DocumentBuilderFactory dbFactory = DocumentBuilderFactoryImpl.newInstance();
        // 2. A partir del objeto DocumentBuilderFactory crear un objeto DocumentBuilder
        DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
        // 3. Generar el documento XML
        documentoXML = docBuilder.newDocument();
    } catch (Exception e) {
        System.out.println(&quot;Error : &quot; + e);
    }
    // 4. Crear el elemento &quot;descargas&quot;
    descarga = documentoXML.createElement(TAG_DESCARGAS);
    // 5. Agregar al documento principal
    documentoXML.appendChild(descarga);
}</pre>
<p><!--INFOLINKS_ON--></p>
<ol>
<li>Creamos un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilderFactory.html">DocumentBuilderFactory</a>, utilizando la el método <em>newInstance()</em> de la clase <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xerces/jaxp/DocumentBuilderFactoryImpl.html">DocumentBuilderFactoryImpl</a>.</li>
<li>Creamos un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilder.html">DocumentBuilder</a>, con el que crearemos el objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></li>
<li>Generamos el documento usando el método <em>newDocument()</em> de <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilder.html">DocumentBuilder</a></li>
<li>Se crea el elemento raíz del documento XML y,</li>
<li>Se añade dicho elemento al objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a></li>
</ol>
<p>Después de esto, ya tenemos listo nuestro objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Document.html">Document</a> en donde crearemos el documento XML. El paso siguiente será alimentar el documento XML con la información de nuestros objetos, lo cual se hace en el método <em>generarDocumentoXMLDescarga</em>:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">public void generarDocumentoXMLDescarga(Descargas descargas)
{
    Element elemento;
    Element item;
    // 1. Crear elemento
    elemento = documentoXML.createElement(TAG_DESCARGA);
    // 2. Asignar un atributo
    elemento.setAttribute(TAG_ID, &quot;&quot;+descargas.getID());
    // 3. Aniadir elemento al documento
    descarga.appendChild(elemento);
    // a. Crear item
    item = documentoXML.createElement(TAG_TITULO);
    // b. Asignar un dato al item
    item.appendChild(documentoXML.createTextNode(descargas.getTitulo()));
    // c. Aniadir el item
    elemento.appendChild(item);
    // todos los items se crean sigiuendo el patron a, b, c
    // el código fuente completo se encuentra
    //disponible para su descarga al final de este artículo
}</pre>
<p><!--INFOLINKS_ON--></p>
<ol>
<li>Se crea un elemento (<em>&lt;descarga&gt;</em>)</li>
<li>Se asigna un atributo al elemento (<em>&lt;descarga id=&#8221;xxx&#8221;&gt;</em>)</li>
<li>Se añade el elemento al documento XML; posteriormente tenemos la creación de items, para dicho elemento:<br />
a. Se crea el item (<em>&lt;titulo&gt;&lt;/titulo&gt;</em>)<br />
b. Se asigna un dato al item <em>(&lt;titulo&gt;datos, muchos datos&lt;/titulo&gt;)</em><br />
c. Se añade el item al elemento <em>(&lt;descarga id=&#8221;xxx&#8221;&gt;&lt;titulo&gt;datos, muchos datos&lt;/titulo&gt;&lt;/descarga&gt;)</em></li>
</ol>
<p>Para generar una salida del documento XML se utilizamos el método <em>generaTextoXML()</em> el cual devuelve un string que contiene el documento XML:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">private String generaTextoXML() {
   StringWriter strWriter = null;
   XMLSerializer seliarizadorXML = null;
   OutputFormat formatoSalida = null;
   try {
      seliarizadorXML = new XMLSerializer();
      strWriter = new StringWriter();
      formatoSalida = new OutputFormat();
      // 1. Establecer el formato
      formatoSalida.setEncoding(XML_ENCODING);
      formatoSalida.setVersion(XML_VERSION);
      formatoSalida.setIndenting(true);
      formatoSalida.setIndent(4);
      // 2. Definir un objeto donde se generara el codigo
      seliarizadorXML.setOutputCharStream(strWriter);
      // 3. Aplicar el formato
      seliarizadorXML.setOutputFormat(formatoSalida);
      // 4. Serializar documento XML
      seliarizadorXML.serialize(documentoXML);
      strWriter.close();
   } catch (IOException ioEx) {
      System.out.println(&quot;Error : &quot; + ioEx);
   }
   return strWriter.toString();
}</pre>
<p><!--INFOLINKS_ON--></p>
<ol>
<li>Utilizando un objeto de la clase <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/OutputFormat.html">OutputFormat</a>, se asigna el tipo de codificación y versión del archivo XML, activamos la identación y la ponemos a 4 espacios</li>
<li>Un objeto <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/XMLSerializer.html">XMLSerializer</a> escribe los datos del documento XML sobre un objeto de flujo de salida, en este caso un objeto <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/io/StringWriter.html">StringWriter</a>.</li>
<li>Asignamos el tipo de formato que el objeto <a href="http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/XMLSerializer.html">XMLSerializer</a> generará</li>
<li>Generamos el documento XML</li>
</ol>
<p>El string generado por <em>generaTextoXML()</em> podemos imprimirlo directamente en pantalla, o escribirlo en un archivo como lo hace el método <em>guardarDocumentoXML()</em>:</p>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">public void guardarDocumentoXML(String texto) {
   try {
      OutputStream fout = new FileOutputStream(NOMBRE_ARCHIVO_XML);
      OutputStream bout = new BufferedOutputStream(fout);
      OutputStreamWriter out = new OutputStreamWriter(bout, JAVA_ENCODING);
      out.write(texto);
      out.flush();
      out.close();
   } catch (UnsupportedEncodingException e) {
   //etc, bla, bla, catchichurri
}</pre>
<p><!--INFOLINKS_ON--></p>
<p>El método <em>guardarDocumentoXML()</em> un objeto FileOutputStream para escribir los datos del documento XML en un archivo (cuyo nombre define la variable NOMBRE_ARCHIVO_XML).</p>
<p>Continúa leyendo la segunda parte, en donde aprenderemos a Parsear archivos XML. Vamos parce!</p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/java/" rel="tag nofollow">java</a>, <a href="http://casidiablo.net/tag/parsear/" rel="tag nofollow">Parsear</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a>, <a href="http://casidiablo.net/tag/xerces/" rel="tag nofollow">xerces</a>, <a href="http://casidiablo.net/tag/xml/" rel="tag nofollow">xml</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/procesamiento-xml-java-xerces/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Validación de formularios en Java</title>
		<link>http://casidiablo.net/validacion-de-formularios-en-java/</link>
		<comments>http://casidiablo.net/validacion-de-formularios-en-java/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 17:50:44 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[Character]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[ejercicios]]></category>
		<category><![CDATA[JTextField]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1242</guid>
		<description><![CDATA[

CódiLa validación de formularios nos permite asegurarnos que los datos que, por ejemplo, un usuario ingrese en un campo de texto sean válidos. Dicha validación puede hacerse una vez que el usuario haya digitado todos los datos, o mientras el usuario los esté digitando.
Para el primer caso, lo mejor es utilizar expresiones regulares usando el [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%3A%2F%2Fcasidiablo.net%2Fvalidacion-de-formularios-en-java%2F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Validaci%C3%B3n%20de%20formularios%20en%20Java%22%20%7D);"></div>
<p>CódiLa validación de formularios nos permite asegurarnos que los datos que, por ejemplo, un usuario ingrese en un campo de texto sean válidos. Dicha validación puede hacerse <strong>una vez que el usuario haya digitado todos los datos</strong>, o <strong>mientras el usuario los esté digitando</strong>.</p>
<p>Para el primer caso, lo mejor es utilizar expresiones regulares usando el método <em>matches()</em> de la clase <em>String</em> (si necesitas un ejemplo, <a class="tooltip" title="Buscar el ejemplo llamado...::Validación de la información del usuario mediante expresiones regulares" href="http://casidiablo.net/codigo-ejemplos-de-cadenas-y-caracteres-en-java-2/">clic aquí</a>).</p>
<p>Para el segundo caso tendremos que manejar los <a href="http://casidiablo.net/codigo-guis-en-java-eventos-de-mouse-y-teclado/">eventos del teclado</a> que se generen sobre determinado control, usando la interfaz <em>KeyAdapter</em> y el método <em>keyReleased</em>. Así, en nuestro código de ejemplo tenemos <strong>un <em>JTextField</em> al que le <abbr class="tooltip" title="Usando el método addKeyListener">añadimos un <em>Listener</em></abbr> que <em>escuchará</em></strong> los eventos del teclado, y verificará si la tecla presionada es un caractér válido (solo letras), de lo contrario lo elimina.</p>
<p>No hay nada especial en el código de ejemplo salvo por un par de líneas:</p>
<ul>
<li><strong>Línea 17</strong>: se utiliza el método anidado getToolkit().beep(), que hará que el sistema alerte al usuario con un pitido cada vez que un dato erróneo.</li>
<li><strong>Línea 25</strong>: comparamos el <em>char</em> que digite el usuario con el entero 8, que es el código resultado al usar el Backspace (tecla para borrar hacia la izquierda); lo cual permite al usuario borrar caracteres.</li>
</ul>
<h3>Código&#8230;</h3>
<p><!--INFOLINKS_OFF-->
<pre class="brush: java;">import java.awt.Robot;
import javax.swing.*;
import java.awt.event.*;
public class SoloLetras extends JFrame {
	private JTextField caja = new JTextField();
	public SoloLetras() {
		super(&quot;Solo dejo escribir letras&quot;);
		caja.addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent e) {
				Character caracter = new Character(e.getKeyChar());
				if (!esValido(caracter)) {
					String texto = &quot;&quot;;
					for (int i = 0; i &lt; caja.getText().length(); i++)
						if (esValido(new Character(caja.getText().charAt(i))))
							texto += caja.getText().charAt(i);
					caja.setText(texto);
					getToolkit().beep();
				}
			}
			public boolean esValido(Character caracter)
			{
				char c = caracter.charValue();
				if ( !(Character.isLetter(c) //si es letra
						|| c == ' ' //o un espacio
						|| c == 8 //o backspace
					))
					return false;
				else
					return true;
			}
		});
		getContentPane().add(caja);
		setSize(300, 60);
		setVisible(true);
	}
	public static void main(String args[]) {
		JFrame.setDefaultLookAndFeelDecorated(true);
		SoloLetras ventana = new SoloLetras();
		ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}</pre>
<p><!--INFOLINKS_ON--></p>
<p><a href="http://casidiablo.net/descargar/Validaci%C3%B3n+Formularios" title="Descargar archivo SoloLetras.zip" class="descargacodigo tooltip">Descargar código fuente</a></p>


	<div class="etiquetas">Etiquetas: <a href="http://casidiablo.net/tag/character/" rel="tag nofollow">Character</a>, <a href="http://casidiablo.net/tag/ejemplos/" rel="tag nofollow">ejemplos</a>, <a href="http://casidiablo.net/tag/ejercicios/" rel="tag nofollow">ejercicios</a>, <a href="http://casidiablo.net/tag/java/" rel="tag nofollow">java</a>, <a href="http://casidiablo.net/tag/jtextfield/" rel="tag nofollow">JTextField</a>, <a href="http://casidiablo.net/tag/programacion/" rel="tag nofollow">programación</a>, <a href="http://casidiablo.net/tag/tip/" rel="tag nofollow">tip</a><br /></div>
]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/validacion-de-formularios-en-java/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
