Noticias:

SMF - Just Installed!

¿Algún programador Java?

Iniciado por Vitirr, Junio 12, 2007, 12:58:42 AM

Vitirr

Buenas, estoy haciendo un programita del que ya hablé en otro hilo que modifique la cantidad inicial de las criaturas de un mapa. Lo estoy haciendo en Java y se siguen varios pasos:

- Descomprimir el mapa en una carpeta temporal (un archivo de mapas del H5 no es más que un zip renombrado con extensión .h5m).
- Modificar el archivo map.xdb.
- Comprimir los archivos del mapa y meterlos en el archivo que diga el usuario.

Pues bien, aparentemente los dos primeros pasos se hacen perfectamente, sin embargo el tercero me está dando problemas. El caso es que lo hace bien, y si yo abro el archivo que me genera con el Winzip o Winrar se lee. El problema es que el editor no lo carga, me da un fallo de formato, o de que lo estoy abriendo fuera de la carpeta Maps del directorio de instalación, lo cual no es el caso. Sin embargo si descomprimo el archivo con Winzip o Winrar, y lo vuelvo a comprimir con alguno de esos programas, el editor deja de quejarse.

La verdad, parece algún problema del algoritmo de compresión de la clase ZIP, aunque lo más probable es que yo esté haciendo algo mal en mi código.

Aquí tenéis un mapa generado de la forma que os digo con mi aplicación. Y os dejo el código de la compresión por si alguien ve algo raro:

[code:1]public void zipDir(String origen, String destino) throws Exception
 {
   try
   {
     //create a ZipOutputStream to zip the data to
     ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destino));
     //zos.setLevel(3);
     
     //call the recurseve zipDir method
     recZipDir(origen, zos);
     
     //close the stream
     zos.close();
   }
   catch(Exception e)
   {
     Exception ex = new Exception("nError in method zipDir of class ZipClass: " +
                                   e.getLocalizedMessage());
     throw ex;
   }
 }
 
 private void recZipDir(String origen, ZipOutputStream zos) throws Exception
 {
   try
   {
     //create a new File object based on the directory we
     //have to zip
     File zipDir = new File(origen);
     
     //get a listing of the directory content
     File[] dirList = zipDir.listFiles();
     byte[] readBuffer = new byte[this.BUFFER_SIZE];//2156];
     int bytesIn = 0;
     //loop through dirList, and zip the files
     for(int i=0; i<dirList.length; i++)
     {
       File f = dirList[i];
       if(f.isDirectory())
       {
         //if the File object is a directory, call this
         //function again to add its content recursively
         String filePath = f.getPath();
         recZipDir(filePath, zos);
         
         //loop again
         continue;
       }
       
       //if we reached here, the File object f was not
       //a directory create a FileInputStream on top of f    
       FileInputStream fis = new FileInputStream(f);
       
       //create a new zip entry
       String filePath = f.getPath();
       //we remove the temporal directory root to the path
       if(tempDir!=null)
         filePath = filePath.substring(filePath.lastIndexOf(tempDir) + tempDir.length());
       ZipEntry anEntry = new ZipEntry(filePath);
       
       //place the zip entry in the ZipOutputStream object
       zos.putNextEntry(anEntry);
       
       //now write the content of the file to the ZipOutputStream
       while((bytesIn = fis.read(readBuffer)) != -1)
       {
         zos.write(readBuffer, 0, bytesIn);
       }
       zos.flush();
       //close de entry
       zos.closeEntry();
       //close the Stream
       fis.close();
     }
   }
   catch(Exception e)
   {
     Exception ex = new Exception("nError in method recZipDir of class ZipClass: " +
                                   e.getLocalizedMessage());
     throw ex;
   }

 }[/code:1]

A ver si alguien me puede echar una manilla.

Wexseaste

Yo no sé mucho pero lo puedo intentar; pero necesito el valor y definición de las variables o atributos y también el método main; si no te importa y si te sigue interesando (digo essto porque este hilo ya tiene unos años)
Si buscas una buena solución y no la encuentras, consulta al tiempo, puesto que el tiempo es la máxima sabiduría. -Tales de Mileto

Storm-Giant

5 años después, habiendo pasado por el H6...dudo que Vittir tenga ganas de retomar esto :laugh:
Orgulloso fundador del Club de Antifans de Lepastur - ¡Hazte miembro y ríete tú del Tirano Infernal!

http://www.starcraft-esp.com/

Wexseaste

[quote user="Storm-Giant" post="61473"]5 años después, habiendo pasado por el H6...dudo que Vittir tenga ganas de retomar esto :laugh:[/quote]

Por preguntar no pierdo nada  :biggrin:
Si buscas una buena solución y no la encuentras, consulta al tiempo, puesto que el tiempo es la máxima sabiduría. -Tales de Mileto

Storm-Giant

[quote user="Wexseaste" post="61476"][quote user="Storm-Giant" post="61473"]5 años después, habiendo pasado por el H6...dudo que Vittir tenga ganas de retomar esto :laugh:[/quote]

Por preguntar no pierdo nada  :biggrin:[/quote]
Pues espera sentado :roll1:
Orgulloso fundador del Club de Antifans de Lepastur - ¡Hazte miembro y ríete tú del Tirano Infernal!

http://www.starcraft-esp.com/

Lepastur

Hombre, en vista d q Heroes VI no es ni será funcional, no hay q descartar q se reavive el interés en mejorar ciertos aspectos de Heroes V, y esto no me parece mala idea, la vdd  :beer:
http://www.rae.es / :worthy: para Krator ¡por ser un campeón! / www.TorredeMarfil.es / Presidente de la plataforma de los Archimagos y Liches flanqueadores de títulos de web.

Krator

Storm, cualquiera que esté dispuesto a ayudar es para agradecerlo, aunque llegue años tarde. Nunca se sabe quien puede continuar el trabajo o a quien le puede interesar conocer a alguien que sepa algo de Java  :thumbsup:
Doble cruzado, cuadruple placer.