Java: programa estupido

oZk4h

Buenas. Soy nuevo en este foro y se podría decir que casi en JAVA, asi que nada, uno más por aquí. Tengo un problema con el resultado que arroja este código. Compilar compila, pero el resultado no es el esperado.

package hola;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

//Se trata de escribir en un ficheroi con formato:
//
//9.99							12						Java T-Shirt
//9.99							8						Java Mug
//15.99							13				Duke Juggling Dolls
//y luego leerlo y sacarlo por pantalla
//NOTA: los datos numericos deben escribirse como "numeros" y 
// no como cadenas de caracteres.
//NOTA: los Strings deben escribirse como cadenas de bytes
//no como cadenas de caracteres (1caracter = 2 bytes)

public class DataIOTest {
	public static void main (String args[]) throws IOException {
FileOutputStream fos = null;
FileInputStream fis = null;

// E/S con DataInputStream y DataOutputStream: ficheros y sockets
// Escribir en fichero invoice1.txt

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("invoice1.txt")));
DataInputStream  dis = new DataInputStream(new BufferedInputStream(new FileInputStream("invoice1.txt")));

double[] prices = {19.99, 9.99, 15.99, 3.99, 4.99};
int[] units = {12, 8, 13, 29, 50};
String[] descriptions = { "Java T-Shirt",
		"Java Mug",
		"Duke Juggling Dolls",
		"Java Key Chain",
		"Java Shiet"};
// Writing loop
for (int j=0; j<prices.length; j++) {
	dos.writeDouble(prices[j]); 
	dos.writeChar('\t'); 
	dos.writeInt(units[j]); 
	dos.writeChar('\t');  
dos.writeBytes(descriptions[j]); dos.writeChar('\t'); dos.writeChar('\n'); } dos.close(); } }

El tema es que este programa tonto, que solo es para hacer una lista en un txt con 3 columnas con respectivamente precios (primera), numero de unidades y descripcion del producto, me está creando un txt con caracteres extraños (parecido a lo que se ve cuando abres un fichero .bin con el editor de texto y cosas similares, algo que cualquiera como usuario estandar de windows habrá visto a poco que curiosee).
De momento estoy en la "primera fase" del ejercicio, que es escribir la tabla. Luego será leerla.

Esto es lo que veo yo en el txt:

No entiendo como algo tan simple no me va. Debe ser alguna barbaridad que no veo.

Obviamente lo que busco es que:

  • se impriman los números bien (tanto los double como los int)
  • las cadenas de texto salgan bien igualmente (se ven espacios raros, no tengo ni idea de por qué)
  • salgan las columnas niqueladas, las tabulaciones bien puestas (esto parece que mas o menos si)
    No es nada del otro mundo (ver comentario del principio en el codigo)

Nótese que estoy usando métodos específicos de la clase DataOutputStream (instancaido en el codigo como dos) para el tipo de dato que quiero escribir. Uno para los double, otro para los caracteres de tabulacion y salto y otro para las strings.
Para este ultimo había usado antes el método del la clase DataOutputStream llamado WriteChars, pero de unos apuntes que tengo, he sabido que no se debe utilizar ese, sino writeBytes. Un poco ciencia infusa, sí.


PD: no soy informático, sino electrónico lo cual no quita que sepa algo de esto pero ni mucho menos tanto como un informático :D. Todo consejo para hacer que este programilla tire, será agradecido

FAIL con el título: cambiad el título por uno mas adecuado, por favor, que me he precipitado en enviar el post. Algo tal que así: Lista simple con columnas, no se imprime bien

bLero

Tienes que escribirlo todo como chars, o en su defecto como un string. Lo que estas haciendo es escribir el número en el fichero, pero luego eso se traduce a Ascii y no se corresponde con el número.

Lecherito

O usar descriptions[j].getBytes();

Y entonces ahora sí que metes bytes

Usuarios habituales

  • Lecherito
  • bLero
  • oZk4h