Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Renombrar un archivo temporal

Estas en el tema de Renombrar un archivo temporal en el foro de Java en Foros del Web. Buenas tardes, estoy intentando modificar el nombre y extensión de un archivo temporal. Hago lo siguiente: File fTemporal = File.createTempFile("origen",null); File dest = new File(aTemporal.getParentFile()+"\\destino.pdf"); ...
  #1 (permalink)  
Antiguo 14/12/2015, 06:19
 
Fecha de Ingreso: diciembre-2015
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Renombrar un archivo temporal

Buenas tardes,
estoy intentando modificar el nombre y extensión de un archivo temporal. Hago lo siguiente:

File fTemporal = File.createTempFile("origen",null);

File dest = new File(aTemporal.getParentFile()+"\\destino.pdf");


boolean correcto=false;
if (dest.exists()) {
dest.delete();
correcto = fTemporal.renameTo(dest);

}

if (correcto){
System.out.println ("se ha renombrado correctamente");
}else{
System.out.println ("no se ha renombrado");
}

BufferedWriter out = new BufferedWriter(new FileWriter(fTemporal));
out.write("Esto es un fichero nuevo");
out.close();

El programa imprime por consola "Se ha renombrado correctamente" por lo que "supuestamente" ha funcionado.
Me crea un fichero origen con extensión tmp de 1kb y luego un fichero destino con extensión pdf de 0kb, el cuál no puedo abrir porque me dice que está dañado. No comprendo por qué no me lo renombra y por qué no me borra el fichero destino si le hago un delete().
Muchas gracias de antemano.
Saludos.
  #2 (permalink)  
Antiguo 14/12/2015, 06:56
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Renombrar un archivo temporal

Buenas,

Gracias por utilizar la opcion de Highlight en tus proximos post.

Yo veo que te esta haciendo exactamente lo que le has programado:

Creas el fichero temporal de 0KB.
Código Java:
Ver original
  1. File fTemporal = File.createTempFile("origen",null);

Renombras el temporal a un fichero destino.pdf de 0KB, al igual que el fichero origen. Obviamente un fichero PDF de 0KB da un error al intentar abrirlo con un visor.
Código Java:
Ver original
  1. File dest = new File(aTemporal.getParentFile()+"\\destino.pdf");
  2. boolean correcto=false;
  3. if (dest.exists()) {
  4. dest.delete();
  5. correcto = fTemporal.renameTo(dest);
  6. }
  7. if (correcto){
  8. System.out.println ("se ha renombrado correctamente");
  9. }else{
  10. System.out.println ("no se ha renombrado");
  11. }

Por ultimo, haces lo mas extrano de todo. Retomas el descriptor del fichero temporal y lo recreeas y copias insertandole una cadena (de ahi que al final el temporal exista y tenga 1KB de informacion).
Código Java:
Ver original
  1. BufferedWriter out = new BufferedWriter(new FileWriter(fTemporal));
  2. out.write("Esto es un fichero nuevo");
  3. out.close();

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 14/12/2015, 11:09
 
Fecha de Ingreso: diciembre-2015
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Renombrar un archivo temporal

Gracias por la respuesta.
Creo primero un fichero y le añado información para que no esté vacío:

File fTemporal = File.createTempFile("ORIGEN",null);
BufferedWriter out = new BufferedWriter(new FileWriter(fTemporal));
out.write("Esto es un fichero temporal");
out.close();

Creo el otro fichero y hago lo mismo que en el anterior:

File dest = new File(fTemporal.getParentFile()+"\\DESTINO.pdf");
BufferedWriter outer = new BufferedWriter(new FileWriter(dest));
outer.write("Esto es un fichero");
outer.close();

y posteriormente renombro:

boolean correcto=false;
if (dest.exists()) {
dest.delete();
correcto = fTemporal.renameTo(dest);
}

Ahora sí lo hago correctamente. El problema es que creo un pdf que no puedo abrir, me sale el siguiente error:
Adobe Reader could not open 'DESTINO.pdf' because it is either not a supported file type or because the file has been damaged.
Sin embargo si cambio la extensión a .doc, puedo abrir el word perfectament.
¿A qué puede deberse?
Muchas gracias.
Saludos!
  #4 (permalink)  
Antiguo 15/12/2015, 00:29
Avatar de jlrodmon  
Fecha de Ingreso: diciembre-2015
Ubicación: España
Mensajes: 9
Antigüedad: 8 años, 4 meses
Puntos: 2
Respuesta: Renombrar un archivo temporal

Sin ver el archivo origen no te lo puedo asegurar, pero si el adobe te indica que no es un pdf válido y en cambio el word si te lo puedo abrir (la extensión de per sé no significa nada), parece que el archivo origen es directamente un archivo de texto en formato doc.

Si tienes un ejemplo podríamos echarle un vistazo.
  #5 (permalink)  
Antiguo 15/12/2015, 01:29
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Renombrar un archivo temporal

Buenas,

PDF es un formato binario, no un formato de texto. https://es.wikipedia.org/wiki/PDF
-Intenta abrir el notepad, escribir un texto y guardarlo como PDF. Al abrirlo el visor de PDFs te va a dar el mismo error.
-Ahora intenta abrir con el notepad un fichero PDF ya existente en tu equipo que funcione. Como comprobaras su contenido esta lleno de simbolos extranos y no hay texto, verdad?

Para crear y manipular ficheros PDF desde Java deberias utilizar librerias java especializadas, como iText: http://sourceforge.net/projects/itext/

Word te abre el fichero porque es un editor de textos y es capaz de detectar y abrir sin problemas un fichero de texto. Nada que ver con PDF Reader, que es un visor de ficheros digitales en formato PDF.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #6 (permalink)  
Antiguo 24/12/2015, 01:52
 
Fecha de Ingreso: diciembre-2015
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Renombrar un archivo temporal

Muchas gracias a todos!
al final lo he hecho con la librería itext de esta forma:

Document documento = new Document();
File file = new File("mipdf.pdf");

FileOutputStream ficheroPdf = new FileOutputStream(file);

try {
PdfWriter.getInstance(documento,ficheroPdf).setIni tialLeading(20);

} catch (DocumentException e1) {
e1.printStackTrace();
}

documento.open();


Paragraph parrafo = new Paragraph("Este es mi pdf nuevo);
documento.add(parrafo);

documento.close()

Saludos!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:43.