FileInputStream | FileWriter en Java

Turco

Buenas, estoy atascado en una actividad de clase que no consigo resolver. La actividad en sí dice así:

Actividad 5. Ficheros binarios
1) Desarrolla un programa en java que escriba bytes en un fichero y posteriormente lo
recupere del fichero y lo muestra por pantalla (lo lee):
 Crea el flujo de salida al fichero (FileOutputstream)
 Crea el flujo de entrada (FileInputStream)
 Escribe datos en el fichero (50 iteraciones de contador i) => write
 Lee el fichero => read

2) Al fichero anterior, añade al final 10 caracteres “+” (de uno en uno)

  • para la entrega, haz también una captura con un editor, del contenido del fichero creado

La primera parte la saco sin problemas, pero es en la segunda donde no consigo hacer que me devuelva la ristra de 50 números y los '+'. He probado mil formas y los resultados que he obtenido son:

1º Se muestran por pantalla los 50 números correctamente, pero no los '+', a pesar de que si abro el fichero, están ahí. Esto me pasa si meto los '+' mediante FileWriter.
2º Se muestran por pantalla los 50 números de manera ilegible (binario) y los '+' correctamente.
3º Se muestran por pantalla los 50 números correctamente, y además, me salen los '+' en código ascii, es decir, me salen 10 números 43 que corresponden a los 10 '+'.

Con la tercera forma casi lo consigo resolver, aunque de manera chapucera, ya que le meto una condición if que diga que si es distinto de 43, imprima normal, y sino, que lo castee a char, pero claro... además de los '+', también me castea el 43 correspondiente a la ristra de 50 números.

package actvidad5;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

public class Binarios {

public static final String filename = "E:\\2º DAM\\AED\\Unidad 1\\Actividades\\Actividad 5\\Prueba.txt";

public static void main(String[] args) {

	Binarios b = new Binarios();
	b.parteUno(filename);
	System.out.println("\n===================\n");
	b.parteDos(filename);
}

public void parteUno(String file) {
	File f = new File(file);
	
	try {
	FileOutputStream fot = new FileOutputStream(f);
	FileInputStream fit = new FileInputStream(f);
	
	for(int i = 0; i < 50; i++)
		fot.write(i);
	
	int c;
	while ((c = fit.read()) != -1) {
		System.out.println(c);
	}
	
	fot.close();
	fit.close();
	
	} catch (IOException io) {
		System.out.println("Error en la E/S");	
	}
}
	
public void parteDos(String file) {		
	try {
		FileOutputStream fot = new FileOutputStream(file, true);
		FileInputStream fit = new FileInputStream(file);
		
		for(int i = 0; i < 10; i++)
			fot.write('+');
		
		int by;
		while ((by = fit.read()) != -1) {
				System.out.println(by);
		}
		
		fot.close();
		fit.close();
		
		
	} catch (FileNotFoundException fnt) {
		System.out.println("No se encuentra el archivo");
		
	} catch (IOException io) {
		System.out.println("Error en la E/S");
	}
}

}

¿Alguien sabría de que manera podría solucionarlo?

Kra

¿Has probado a meter los números 5 y 0 con ascii, además de los +?

1 respuesta
Lecherito

Yo sinceramente metería un Scanner como wrapper al fileinputstream e ir imprimiendo un nextLine() fuck the police.

1 respuesta
Turco

#2 Según entiendo yo, los está metiendo en ascii, pero codificándolos en binario al usar el FileInputStream. Aunque vamos... no me hagas mucho caso, he empezado a usar el FileInputStream y el FileOutputStream ayer.

#3 Si claro, eso suena a que obtendría un resultado excelente, pero casi mejor que me limito a lo que he aprendido hasta ahora jajajaja

¿Alguna manera con el código que tengo o alguna cosilla factible?.
Gracias a ambos de todas maneras por las aportaciones.

Usuarios habituales

  • Turco
  • Lecherito
  • Kra