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

Unir ficheros

Estas en el tema de Unir ficheros en el foro de Java en Foros del Web. Hola a todos en mi primera intervención en este foro. Lo primero decirles que procedo de otro lenguaje de programación diferente y que soy un ...
  #1 (permalink)  
Antiguo 24/02/2012, 10:02
 
Fecha de Ingreso: febrero-2012
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Unir ficheros

Hola a todos en mi primera intervención en este foro. Lo primero decirles que procedo de otro lenguaje de programación diferente y que soy un novato en esto del java, por lo que pido un poco de paciencia conmigo. Dicho esto expongo mi problema, estoy intentando unir varios ficheros (ficheros de formato tif en concreto) que paso por parámetro a un módulo java, el código que he hecho es el siguiente:


import java.io.*;


public class CopiaFicheros implements Serializable{

public static void main(String[] args) {
copia (args, "c:/ficheroDestino.TIF");
}

public static void copia (String[] ficheroOriginal, String ficheroCopia)
{
try
{
int contador = 0;

// Se abre el fichero donde se hará la copia
FileOutputStream fileOutput = new FileOutputStream (ficheroCopia, true);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput);
int leidos = 0;
int acumulado = 0;
int acumulado1 = 0;
while ( contador < ficheroOriginal.length )
{

System.out.println("FICHERO: "+ficheroOriginal[contador]);

// Se abre el fichero original para lectura

FileInputStream fileInput = new FileInputStream(ficheroOriginal[contador]);
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);

// Bucle para leer de un fichero y escribir en el otro.

byte [] array = new byte[1000];
leidos = bufferedInput.read(array);

while (leidos > 0)
{
bufferedOutput.write(array, 0,leidos);
leidos=bufferedInput.read(array);
acumulado = acumulado + leidos;
}
contador = contador + 1;
acumulado1 = acumulado;
// Cierre de los ficheros
bufferedOutput.flush();
bufferedInput.close();
}

bufferedOutput.close();

}
catch (Exception e)
{
e.printStackTrace();
}
}
}


El caso es que el resultado que obtengo es que solamente me copia el primero de los archivos, el resto nada de nada. Alguien que me pueda sacar de mi ignorancia?

Gracias por anticipado y un saludo
  #2 (permalink)  
Antiguo 08/03/2012, 16:55
 
Fecha de Ingreso: febrero-2012
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Unir ficheros

Bueno, llamenme pesado pero si a alguien le interesa, he depurado un poco el codigo anterior y este sí funciona cuando se trata de ficheros de textos, pero para ficheros pdf, tif, jpg o similar, solamente soy capaz de que copie el primero que le paso por parámetro, el resto nada.

Suplico una ayuda por favor.

Este es el código:

import java.io.*;


public class CopiaFicheros1
{

public static void main(String[] args)
{
int contador = 0;
boolean sino = true;
while (contador < args.length)
{
System.out.println(contador);
if (contador == 0)
sino = false;
else
sino = true;

copia (args[contador], "C://ficheroDestino.TIF", sino);

contador++;
}
}

public static void copia (String ficheroOriginal, String ficheroCopia, boolean si_no)
{
try
{

int leidos = 0;

// Se abre el fichero donde se hará la copia
FileOutputStream fileOutput = new FileOutputStream (ficheroCopia, si_no);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput);


System.out.println("FICHERO: "+ficheroOriginal);

// Se abre el fichero original para lectura

FileInputStream fileInput = new FileInputStream(ficheroOriginal);
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);

// Bucle para leer de un fichero y escribir en el otro.

byte [] array = new byte[1000];
leidos = bufferedInput.read(array);

while (leidos > 0)
{
bufferedOutput.write(array, 0,leidos);
leidos=bufferedInput.read(array);

}

// Cierre de los ficheros

bufferedInput.close();
bufferedOutput.close();

}
catch (Exception e)
{
e.printStackTrace();
}
}
}
  #3 (permalink)  
Antiguo 09/03/2012, 10:42
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 10 meses
Puntos: 306
Respuesta: Unir ficheros

Dices que para ficheros de texto funciona, por lo que el problema está en los ficheros tipo TIF.

¿No se ve lo que tu quieres o el tamaño es el mismo que el de un solo fichero?
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 09/03/2012, 16:04
 
Fecha de Ingreso: febrero-2012
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Unir ficheros

Hola Xerelo, gracias por interesarte por el tema. Me preguntas si no se ve el fichero o el tamaño es el mismo que el de un solo fichero, pues ni una cosa ni la otra, me explico. El fichero que se ve es el primero que envío para unir, pero el tamaño es prácticamente el de los dos, osea, si el primer fichero tiene 1300 bytes y el otro 900 el resultante tiene 2200 pero solamente se ve el primer fichero que envío para unir.

Bueno, no se si con esto te he aclarado lo que me pasa. Si necesitas algún dato más que yo te pueda dar no dudes en pedirmelo.

Saludos.
  #5 (permalink)  
Antiguo 10/03/2012, 04:04
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 10 meses
Puntos: 306
Respuesta: Unir ficheros

La mayoría de formatos de fichero llevan unos bytes iniciales con cierta información sobre el formato.

Tendrás que informarte sobre la estructura de los TIF y eliminar la cabecera del segundo archivo (y la cola del primero si la hay). A lo mejor incluso en esa cabecera tendrás que cambiar algún dato.

Busca información sobre la estructura de los TIF, o compara los bytes de dos archivos
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 12/03/2012, 16:17
 
Fecha de Ingreso: febrero-2012
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Unir ficheros

Hola Xerelo, he estado indagando sobre lo que me comentaste sobre la estructura de los tiff y mirándo por ahí me he enterado que existe una libreria llamada JAI (Java Advanced Imaging) que permite el manejo de muchos archivos de difrentes formatos como JPG, TIF, GIF, etc. Bueno una vez que me he enterado de esto voy a ver si me entero como se maneja. Bueno si hay alguien que me pueda dar alguna ayuda se agradecerá.

Chao, chao.
  #7 (permalink)  
Antiguo 25/03/2012, 15:17
 
Fecha de Ingreso: febrero-2012
Mensajes: 6
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Unir ficheros

Bueno si a alguien le interesa ya lo tengo. Bueno yo no tengo mucho mérito ya que lo único que he hecho es encontrar un código que utiliza el clase JAI_IMAGEIO.JAR con la que hace precisamente lo que trato de hacer. Bueno aquí les dejo el código:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;

class JAIprueba {

public static void concateTiff(String[] inputTiffs, String outputTiff) {
List<IIOImage> imageList = new ArrayList<IIOImage>();
ImageInputStream tiffStream = null;
IIOImage tiffImage = null;

try {
// locate a TIFF reader
System.out.println(inputTiffs[0]);
Iterator<ImageReader> tiffReaders = ImageIO.getImageReadersByFormatName("TIF");
if (!tiffReaders.hasNext())
throw new IllegalStateException("No TIFF reader found");
ImageReader tiffReader = tiffReaders.next();

for (int i = 0; i < inputTiffs.length; i++) {
System.out.println("image-" + i);
// point it to our image file
tiffStream = ImageIO.createImageInputStream(new File(inputTiffs[i]));
tiffReader.setInput(tiffStream);
// read pages until end of image from the TIFF file
try {
for (int index = 0;; index++) {
tiffImage = tiffReader.readAll(index, tiffReader.getDefaultReadParam());
imageList.add(tiffImage);
}
} catch (IndexOutOfBoundsException ex) {
System.out.println("page limit crossed!");
}
}

Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
ImageWriter writer = writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(new File(outputTiff));
writer.setOutput(ios);

IIOImage firstIioImage = imageList.remove(0);
writer.write(firstIioImage);
int i = 1;
for (IIOImage iioImage : imageList) {
writer.writeInsert(i++, iioImage, null);
}
ios.close();
tiffStream.close();
} catch (IOException e) {
System.out.println("error merging tiff. Msg=" + e.getMessage());
}
}

public static void main(String Args[]){

concateTiff(Args, "C:\\resultado.TIF");
}
}

Bueno saludos a todos y especial a Xerelo que fue el que más me ha ayudado.

Etiquetas: ficheros, programa, string
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 02:36.