elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Insertar numeros ordenados en un fichero a partir de otros dos ficheros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Insertar numeros ordenados en un fichero a partir de otros dos ficheros  (Leído 2,714 veces)
tenji

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Insertar numeros ordenados en un fichero a partir de otros dos ficheros
« en: 28 Septiembre 2012, 18:15 pm »

Hola a todos. Necesito extraer números leidos de 2 ficheros para insertarlos de manera ordenada en un nuevo fichero que genero. Hay una dificultad añadida, no puedo usar array  :-(. ¿me podrias ayudar?. NO SE COMO PODER INSERTARLOS BIEN.
Este es mi código. En él, viene escrito el enunciado
Código:
import java.io.*;
import javax.swing.JOptionPane;

/**
*
Se quiere crear una clase llamada MezclaFicheros en la que se van
  a crear dos ficheros(llamados NUM1.dat y NUM2.dat con números
  enteros ). Los números de ambos ficheros los introducimos por
  teclado en orden creciente. Por ejemplo, primero introducimos
  Nº números del fichero 1(p.ej:4), introducimos los números
  (p.ej: 4,6,8,10) y después los del otro fichero (1,3,5,7,8).
          Una vez creado ambos ficheros, crearemos otro llamado MEZCLA.dat  que
          tendrá los números de los dos ficheros mezclados en orden.     (1,3,4,5,6,7,8,8,10).
*/
       public class MezclaFicherosSinArray {

/**
* Método escribirFichero. Dado un nombre de fichero, escribe una serie de numeros
* introducidos por teclado
* @param nombreFichero
* @throws IOException
*/
public static void escribirFichero(String nombreFichero) throws IOException{

    File fichero =new File (nombreFichero);
    FileOutputStream fileout = new FileOutputStream (fichero);
    DataOutputStream dataOS = new DataOutputStream(fileout);
    String texto=JOptionPane.showInputDialog("Cuantos numeros quiere introducir");
    int totalNum=Integer.parseInt(texto);
   
    for (int i=0;i<totalNum; i++)
    {
    String texto2=JOptionPane.showInputDialog("Inserte numero");
int num=Integer.parseInt(texto2);
        dataOS.writeInt(num);
    }
    dataOS.close(); //cerrar strearn

}
/**
* Método leerFichero. Método que lee numeros de un fichero
* @param nombreFichero
* @throws IOException
*/

public static void leerFichero(String nombreFichero)throws IOException{

    File fichero = new File (nombreFichero);
    FileInputStream filein = new FileInputStream (fichero) ;
    DataInputStream dataIS = new DataInputStream (filein);
 
    int e;
    try {
    while (true) {
       
        e = dataIS.readInt(); //recupera la edad
        System.out.println("Numero: "+ e);
    }
    }catch (EOFException eo) {}
    dataIS.close(); //cerrar stream

}

/**
*Método mezclaFicheros. Método que recoge numeros de 2 ficheros dados y los escribe de
*manera ordenada en uno nuevo llamado MEZCLA.DAT
* @param fichero1
* @param fichero2
* @throws IOException
*/
public static void mezclaFicheros(String fichero1, String fichero2) throws IOException{


    File fichero =new File ("MEZCLA.dat");
    FileOutputStream fileout = new FileOutputStream (fichero);
    DataOutputStream dataOS = new DataOutputStream(fileout);
   
    File ficheroleido1 = new File (fichero1);
    FileInputStream filein = new FileInputStream (ficheroleido1) ;
    DataInputStream dataIS = new DataInputStream (filein);
   
    File ficheroleido2 = new File (fichero2);
    FileInputStream filein2 = new FileInputStream (ficheroleido2) ;
    DataInputStream dataIS2 = new DataInputStream (filein2);
       
    int num1,num2;
   
    try {
    num1 = dataIS.readInt();
    num2= dataIS2.readInt();
    while (true)
    {
if(num1<num2)
{
dataOS.writeInt(num1);
        dataIS.readInt();
}else{
if(num1>num2)
{
dataOS.writeInt(num2);
        dataIS2.readInt();
}else{
    dataOS.writeInt(num2);
    dataIS.readInt();
}
}

    }
   
    }catch (EOFException eo) {}
   
    try{
    num1 = dataIS.readInt();
    while(true){
   
    dataOS.writeInt(num1);
    dataIS.readInt();
    }
    }catch(EOFException e){}
   
    dataIS.close();
    dataIS2.close();
    dataOS.close();
   
    System.out.println("RESULTADO FINAL");
    leerFichero("MEZCLA.dat");
}

/**
* Método main
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {

escribirFichero("NUM1.dat");
escribirFichero("NUM2.dat");

System.out.println("FICHERO NUM1.DAT");
leerFichero("NUM1.dat");

System.out.println("FICHERO NUM2.DAT");
leerFichero("NUM2.dat");

System.out.println("FICHERO MEZCLA.DAT");
mezclaFicheros("NUM1.dat", "NUM2.dat");


}


}




Muchas gracias, un saludo y espero que podais ayudarme


En línea

fekaa30

Desconectado Desconectado

Mensajes: 2


fekaa


Ver Perfil
Re: Insertar numeros ordenados en un fichero a partir de otros dos ficheros
« Respuesta #1 en: 30 Septiembre 2012, 05:27 am »

Buenas noches.

Estuve leyendo el problema, te explico mas o menos los datos que podés obtener para poder lograr algo:

La clase DataInputStream que estás usando, es conveniente para guardar datos primitivos (por ejemplo, enteros en tu caso). Según he comprobado, una vez que comenzas a leer los datos, esos datos desaparecer de la memoria de ese objeto. El método available() de la clase DataInputStream permite obtener los bytes disponibles a leer. Cada entero que guardes en un archivo con la clase DataOutputStream, ocupa 4 bytes: ésto significa que si hacemos un (DataInputStream.available() / 4); obtenemos el número de enteros a leer de dicho archivo en memoria. Sin usar arreglos, se complica demasiado; aún así, una solución que se me ocurre es usar una lista enlazada simple de enteros, e ir guardando allí todos los datos. Luego, usas un algoritmo de ordenamiento de listas y la recorres guardando en el archivo MEZCLA.dat los numeros obtenidos (en forma ordenada).

Si no, se me ocurre otra solución, pero es muy "negra" (poco eficiente en mi lenguaje). Si lo solucionas, me avisas cómo lo hiciste, y si se te ocurre alguna idea coméntala así podremos analizarla juntos.

Saludos


En línea

Exígete mucho de tí mismo y espera poco de los demás. Así te ahorrarás disgustos.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines